home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Leser 15 / Amiga Plus Leser CD 15.iso / Games / AmySequencer / AmySequencer2.text < prev    next >
Text File  |  2002-03-13  |  119KB  |  3,303 lines

  1. ;i> 4 febbraio 1999
  2. ;m> 13 febbraio 1999
  3. ;m> 27,28,29,30,31 luglio 1999
  4. ;m> 1,3,6,7,8,11,12,13,16,21 agosto 1999
  5. ;m> 20,27,31 ottobre 1999
  6. ;m> 7,9,10,27,28 novembre 1999
  7. ;m> 4 dicembre 1999
  8. ;m> 14 maggio 2000
  9. ;m> 19,20,21,22,23,24,26,30,31 gennaio 2002
  10. ;m> 1,2,3,4,5,6,7,9,10,11,13,15,16,17,18,19,20,22,23,24,27,28 febbraio 2002
  11. ;m> 1,2,3,4,5,6,7,8,10 marzo 2002
  12. ;---------------------------------
  13.  
  14. ;--------------------------------
  15. ;dati per i colori dello schermo
  16. ;screen colours data
  17. ;--------------------
  18. Data.b 0,0,0
  19. Data.b 4,4,4
  20. Data.b 8,8,8
  21. Data.b 12,12,12
  22. Data.b 12,0,0
  23. Data.b 12,6,0
  24. Data.b 12,12,0
  25. Data.b 6,12,0
  26. Data.b 0,12,0
  27. Data.b 0,12,6
  28. Data.b 0,12,12
  29. Data.b 0,6,12
  30. Data.b 0,0,12
  31. Data.b 6,0,12
  32. Data.b 12,0,12
  33. Data.b 12,0,6
  34.  
  35. ;------------------------------------------------------------------------
  36. ;il seguemte comando indica dove si trovano sul vostro computer i codici
  37. ; sorgenti di Blitz2 da includere in questo programma
  38. ;the following command states the place on your computer where are the Blitz2
  39. ; source codes to be included into this program
  40. ;-----------------------------------------------
  41. INCDIR "Blitz2:Sorgenti/"
  42.  
  43. ;-------------------------------------------------------------------------
  44. ;questo comando inserisce una sola volta in questo punto del programma il
  45. ; codice sorgente specificato
  46. ;-----------------------------
  47. XINCLUDE "MIDIConstants.bb2"
  48.  
  49. ;------------------------------------------------------------------------------
  50. ;le seguenti costanti servono per ricavare il periodo di un canale audio AMIGA
  51. ; dalla frequenza di campionamento
  52. ;the following constants are used to obtain an AMIGA audio channel period from the
  53. ; sampling frequency; there is one for PAL AMIGAs and one for NTSC AMIGAs
  54. ;-------------------------------------------------------------------------
  55.  
  56. ;PAL timing
  57. #TemporizzazionePAL=3546895
  58.  
  59. ;NTSC timing
  60. #TemporizzazioneNTSC=3579545
  61.  
  62. ;-------------------------------------------------------------------------
  63. ;questa costante indica il numero di riferimento della fonte di caratteri
  64. ; Topaz8
  65. ;this constant states the characters font Topaz8 referring number
  66. ;-----------------------------------------------------------------
  67. #FonteDiCaratteriTopaz8=0
  68.  
  69. ;-------------------------------------------------------------------------
  70. ;questa variabile imposta il periodo minimo per i canali audio; il limite
  71. ; per i vecchi AMIGA e' 123, ma io ho scelto un periodo minimo di 125, che
  72. ; corrisponde ad un La nella nona ottava
  73. ;this variable sets the audio channels minimum period for the audio channels;
  74. ; on the oldest AMIGA the lowerst usable period is 123, but I have choosen a
  75. ; minimum period of 125, that is the A note in the ninth octave
  76. ;---------------------------------------------------------------
  77. #PeriodoMinimo=125
  78.  
  79. ;--------------------------------------------------------------------
  80. ;questa costante indica il numero di riferimento della tavolozza dei
  81. ; colori
  82. ;this constant states the colours palette referring number
  83. ;----------------------------------------------------------
  84. #TavolozzaDeiColori=0
  85.  
  86. ;--------------------------------------------------
  87. ;le seguenti costanti indicano il tipo di finestra
  88. ;the following constants state the window's kind
  89. ;------------------------------------------------
  90.  
  91. ;window sizing gadget
  92. #GadgetRidimensionaFinestra=1
  93.  
  94. ;draggable window
  95. #FinestraMovibile=2
  96.  
  97. ;window depth gadget
  98. #GadgetNascondiFinestra=4
  99.  
  100. ;close gadget
  101. #GadgetChiudiFinestra=8
  102.  
  103. ;sizing window right border (you must set gimme-zero-zero to use it)
  104. #BordoDestraFinestraRidimensionabile=16
  105.  
  106. ;sizing window bottom border (you must set gimme-zero-zero to use it)
  107. #BordoBassoFinestraRidimensionabile=32
  108.  
  109. ;backdrop window
  110. #FinestraDiSfondo=256
  111.  
  112. ;gimme-zero-zero window
  113. #DammiZeroZero=1024
  114.  
  115. ;borderless window
  116. #FinestraSenzaBordi=2048
  117.  
  118. ;window active
  119. #FinestraAttivata=4096
  120.  
  121. ;------------------------------------------------
  122. ;le seguenti costanti indicano il tipo di gadget
  123. ;the following constants state the gadgets' kind
  124. ;------------------------------------------------
  125.  
  126. ;invert
  127. #InvertiGadget=1
  128.  
  129. ;related to window's right side
  130. #PosizioneRelativaAllaDestraDellaFinestra=2
  131.  
  132. ;related to window'w bottom side
  133. #PosizioneRelativaAlBassoDellaFinestra=4
  134.  
  135. ;size as window's inner width
  136. #ComeLarghezzaInternaFinestra=8
  137.  
  138. ;size as window's inner height
  139. #ComeAltezzaInternaFinestra=16
  140.  
  141. ;box select
  142. #ScatolaDaSelezionare=32
  143.  
  144. ;horiziontal movement
  145. #MovimentoOrizzontale=64
  146.  
  147. ;vertical movement
  148. #MovimentoVerticale=128
  149.  
  150. ;no border
  151. #NessunBordo=256
  152.  
  153. ;exclude each other
  154. #SiEscludonoLUnLAltro=512
  155.  
  156. ;attach to window's right side
  157. #AttaccaADestraDellaFinestra=1024
  158.  
  159. ;attach to window's left side
  160. #AttaccaASinistraDellaFinestra=2048
  161.  
  162. ;attach to window's top
  163. #AttaccaAllaFinestraInAlto=4096
  164.  
  165. ;attach to window's bottom
  166. #AttaccaAllaFinestraInBasso=8192
  167.  
  168. ;gimme-zero-zero border gadget
  169. #GadgetConMemoriaBordo=16384
  170.  
  171. ;--------------------------------------------------------
  172. ;le seguenti costanti indicano gli eventi delle finestre
  173. ;tht following constants state window events
  174. ;--------------------------------------------
  175. ;you have pressed a mouse button
  176. #HaiPremutoUnTastoDelTopo=8
  177.  
  178. ;you have moved the mouse
  179. #HaiMossoIlTopo=16
  180.  
  181. ;you have pressed a gadget
  182. #HaiPremutoUnGadget=32
  183.  
  184. ;you have released a gadget
  185. #HaiRilasciatoUnGadget=64
  186.  
  187. ;you have activated a menu
  188. #HaiAttivatoIlMenu=256
  189.  
  190. ;you have closed the window
  191. #HaiChiusoLaFinestra=512
  192.  
  193. ;you have pressed a key
  194. #HaiPremutoUnTasto=1024
  195.  
  196. ;-------------------------------------------------------
  197. ;le seguenti costanti indicano i tasti premuti del topo
  198. ;the following constants state the pressed mouse buttons
  199. ;--------------------------------------------------------
  200.  
  201. ;left mouse button
  202. #TastoSinistroDelTopoPremuto=1
  203.  
  204. ;right mouse button
  205. #TastoDestroDelTopoPremuto=2
  206.  
  207. ;-----------------------------------------------------------------------------
  208. ;le seguenti costanti indicano il valore ascii del tasti Backspace, Esc e dei
  209. ; tasti freccia
  210. ;the following constants state the ascii value for the Backspace, Esc and
  211. ; arrow keys
  212. ;------------
  213. #Backspace=8
  214. #Escape=27
  215. #CursorUp=28
  216. #CursorDown=29
  217. #CursorRight=30
  218. #CursorLeft=31
  219.  
  220. ;Backspace key
  221. TastoBackspace$=Chr$(#Backspace)
  222.  
  223. ;Esc key
  224. TastoEsc$=Chr$(#Escape)
  225.  
  226. ;Cursor up key
  227. TastoCursoreSu$=Chr$(#CursorUp)
  228.  
  229. ;Cursor down key
  230. TastoCursoreGiu$=Chr$(#CursorDown)
  231.  
  232. ;Cursor right key
  233. TastoCursoreDestra$=Chr$(#CursorRight)
  234.  
  235. ;Cursor left key
  236. TastoCursoreSinistra$=Chr$(#CursorLeft)
  237.  
  238. ;-----------------------------------------------------------
  239. ;le seguenti costanti indicano i bottoni del joypad premuti
  240. ;the following constants state the joypad pressed buttons
  241. ;---------------------------------------------------------
  242. #_PlayB=1
  243. #_ReverseB=2
  244. #_ForwardB=4
  245. #_GreenB=8
  246. #_YellowB=16
  247. #_RedB=32
  248. #_BlueB=64
  249.  
  250. ;-------------------------------------------------------------------------
  251. ;le seguenti costanti indicano la direzione scelta con il joystick/joypad
  252. ;the following constants state the choosen direction by joystick/joypad
  253. ;-----------------------------------------------------------------------
  254. #JoyMovedUp=0
  255. #JoyMovedRight=2
  256. #JoyMovedDown=4
  257. #JoyMovedLeft=6
  258. #JoyNotMoved=8
  259.  
  260. ;main window
  261. #FinestraPrincipale=0
  262.  
  263. ;main window's gadget list
  264. #ListaGadgetPrincipale=0
  265.  
  266. ;main window's menu list
  267. #ListaMenuPrincipale=0
  268.  
  269. ;sounds editor window
  270. #FinestraEditoreSuoni=1
  271.  
  272. ;sounds editor window's gadget list
  273. #ListaGadgetEditoreSuoni=1
  274.  
  275. ;sound editor window's menu list
  276. #ListaMenuEditoreSuoni=1
  277.  
  278. ;notes editor window
  279. #FinestraEditoreSequenza=2
  280.  
  281. ;notes editor window's gadget list
  282. #ListaGadgetEditoreSequenza=2
  283.  
  284. ;notes editor window's menu list
  285. #ListaMenuEditoreSequenza=2
  286.  
  287. ;note editor window's zonetable
  288. #TabellaZoneEditoreSequenza=0
  289.  
  290. ;window to change basic note length
  291. #FinestraCambioNotaBase=3
  292.  
  293. ;basic note length change window's gadget list
  294. #ListaGadgetCambioNotaBase=3
  295.  
  296. ;basic note change window's zonetable
  297. #TabellaZoneCambioNotaBase=1
  298.  
  299. ;background pic's bitmap
  300. #BitmapImmagineDiSfondo=0
  301.  
  302. ;------------------------------------------------------------------------------
  303. ;queste costanti indicano i cambiamenti che possono essere applicati alle note
  304. ;these constants states different changes that can be applied to notes
  305. ;----------------------------------------------------------------------
  306.  
  307. ;select an event
  308. #SelezionaUnEvento=0
  309.  
  310. ;change the channel of the selected events
  311. #CambiaIlCanaleDegliEventiSelezionati=1
  312.  
  313. ;put up by one the selected events
  314. #AlzaDiUnoGliEventiSelezionati=2
  315.  
  316. ;put down the selected notes of a semitone
  317. #AbbassaDiUnoGliEventiSelezionati=3
  318.  
  319. ;move the selected events forward
  320. #SpostaAvantiNelTempoGliEventiSelezionati=4
  321.  
  322. ;move the selected events back
  323. #SpostaIndietroNelTempoGliEventiSelezionati=5
  324.  
  325. ;increase the selceted events length
  326. #AllungaLaDurataDelleNoteSelezionate=6
  327.  
  328. ;decrease the selected events length
  329. #RiduciLaDurataDelleNoteSelezionate=7
  330.  
  331. ;delete the selected events
  332. #EliminaGliEventiSelezionati=8
  333.  
  334. ;select all the notes
  335. #SelezionaTuttiGliEventi=9
  336.  
  337. ;deselect all the notes
  338. #DeselezionaTuttiGliEventi=10
  339.  
  340. ;toggle selection of all notes
  341. #InvertiLaSelezioneDiTuttiGliEventi=11
  342.  
  343. ;select the events with the same height and of the same channel
  344. #SelezionaGliEventiUguali=12
  345.  
  346. ;add 10 to the selected events=13
  347. #AggiungiDieciAgliEventiSelezionati
  348.  
  349. ;sub 10 to the selected events
  350. #SottraiDieciAgliEventiSelezionati=14
  351.  
  352. ;put up the selected notes of one octave
  353. #AlzaDiUnOttavaLeNoteSelezionate=15
  354.  
  355. ;put down the selected notes of one octave
  356. #AbbassaDiUnOttavaLeNoteSelezionate=16
  357.  
  358. ;-------------------------------------------------------------------------
  359. ;le seguenti costanti indicano il modo di disegno delle note visualizzate
  360. ;the following constants state the displayed notes drawing mode
  361. ;---------------------------------------------------------------
  362.  
  363. ;unselected Event
  364. #EventoNonSelezionato=0
  365.  
  366. ;selected event
  367. #EventoSelezionato=1
  368.  
  369. ;Highlighted event
  370. #EventoEvidenziato=2
  371.  
  372. ;----------------------------------------------
  373. ;queste costanti indicano come suonare le note
  374. ;these constants state how to play notes
  375. ;----------------------------------------
  376.  
  377. ;execute events from the main window
  378. #EseguiGliEventiDallaFinestraPrincipale=0
  379.  
  380. ;execute events from the sequence editor
  381. #EseguiGliEventiDallEditoreSequenza=1
  382.  
  383. ;---------------------------------------------------------------------------
  384. ;le seguenti costanti sono usate dal comando WJam per la selezione del modo
  385. ; grafico
  386. ;the following constants are used by WJam command for the graphic mode selection
  387. ;--------------------------------------------------------------------------------
  388.  
  389. ;one colour with transparent background
  390. #UnColoreConSfondoTrasparente=0
  391.  
  392. ;two colours with full background
  393. #DueColoriConSfondoPieno=1
  394.  
  395. ;          font height, notes invisible area,   selected channel, note delta y
  396. DEFTYPE .b AltezzaFonte,AreaInvisibileDelleNote,CanaleSelezionato,DeltaYNota
  397.  
  398. ;          mouse pressed key,   AMIGA voice off,visible area start y,note position y,visible sequences
  399. DEFTYPE .b TastoPremutoDelTopo, VoceSpenta,     YInizioAreaVisibile, YPosizioneNota, SequenzeVisibili
  400.  
  401. ;          editor window inner height,           editor window inner width
  402. DEFTYPE .w AltezzaInternaFinestraEditoreSequenza,LarghezzaInternaFinestraEditoreSequenza
  403.  
  404. ;          screen height, note delta y,values visible area,  screen height,   selected sequence
  405. DEFTYPE .w AltezzaSchermo,DeltaYNota,  AreaVisibileDeiValori,LarghezzaSchermo,SequenzaSelezionata
  406.  
  407. ;          slider length, mouse x, mouse y, slider height
  408. DEFTYPE .w XLunSlider,    XTopo,   YTopo,   YLunSlider
  409.  
  410. ;          time invisible area,   note delta x,Sequence duration,Events,Selected events,  MIDI enabled
  411. DEFTYPE .l AreaInvisibileDelTempo,DeltaXNota,  DurataSequenza,   Eventi,EventiSelezionati,MIDIAttivato
  412.  
  413. ;          visible area start x,note position x
  414. DEFTYPE .l XInizioAreaVisibile, XPosizioneNota
  415.  
  416.  
  417.  
  418.  
  419. ;-----------------------------------------------------------------------------
  420. ;questa variabile indica la velocita' di esecuzione delle note, indicata come
  421. ; battute al minuto
  422. ;this variable states the notes execution velocity, stated as bars for minute
  423. ;-----------------------------------------------------------------------------
  424. BattuteAlMinuto.w=120
  425.  
  426. ;----------------------------------------------------------------------------
  427. ;questa costante indica il valore per cui bisogna moltiplicare o dividere la
  428. ; frequenza della nota per ricavare rispettivamente la nota successiva o la
  429. ; nota precedente e corrisponde a 2^(1/12)
  430. ;this constant states the value witch it must moltiply or divide the note
  431. ; frequency to obtain respectiveli the following note or the previous note and
  432. ; corresponds to 2^(1/12)
  433. ;-------------------------
  434. DistanzaSemitono.f=1.05946309
  435.  
  436. ;------------------------------------------
  437. ;questa variabile indica la fine del brano
  438. ;this variable states music end
  439. ;-------------------------------
  440. FineMotivo.l=0
  441.  
  442. ;--------------------------------------------------------------
  443. ;questa variabile, diventando Vera, vi fa uscire dal programma
  444. ;this variable, becaming True, let you quit the program
  445. ;-------------------------------------------------------
  446. EsciDalProgramma.b=False
  447.  
  448. ;------------------------------------------------------------------------------
  449. ;Questa variabile indica la larghezza di base delle note; puo' essere cambiata
  450. ; secondo i bisogni del momento
  451. ;This variable states the basic notes width; it can be changed depending of
  452. ; the needs of the moment
  453. ;-------------------------
  454. LarghezzaNota.w=192
  455.  
  456. ;-----------------------------------------------------
  457. ;questa stringa memorizza il carattere di nuova linea
  458. ;this string stores the new line character
  459. ;------------------------------------------
  460. LF$=Chr$(10)
  461.  
  462. ;------------------------------------------------------------------
  463. ;questa variabile indica se e' stata aperta la finestra principale
  464. ;this flag states if the main window is opened
  465. ;----------------------------------------------
  466. FinestraPrincipaleAperta.b=False
  467.  
  468. ;-------------------------------------------------------------
  469. ;questa variabile memorizza la prima sequenza da visualizzare
  470. ;this variable stores the first sequence to be displayed
  471. ;--------------------------------------------------------
  472. PrimaSequenzaDaVisualizzare.w=0
  473.  
  474. ;---------------------------------------------------------------
  475. ;questa variabile indica la scala di visualizzazione delle note
  476. ;this variable states the notes visualiziation scale
  477. ;----------------------------------------------------
  478. ScalaNote.b=1
  479.  
  480. ;-----------------------------------------------------------------------------
  481. ;questa variabile indica se la lista degli ultimi 5 progetti e' stata scritta
  482. ;this flag states if the last 5 loaded projects list has been written
  483. ;---------------------------------------------------------------------
  484. StoriaDeiProgettiAperti.b=False
  485.  
  486. ;------------------------------------------------------------------------
  487. ;La nota base, il quarto, corrisponde a 192 tick; questa costante indica
  488. ; quanti tick passano in un 50mo di secondo per un tempo di 120 battute al
  489. ; minuto
  490. ;The basic note, the quarter, correspond to 192 ticks; this constant signs how
  491. ; many tick takes place in a 50th of a second
  492. ;---------------------------------------------
  493. TicPerCinquantesimoDiSecondo.f=30.72
  494.  
  495. ;--------------------------------------------------------------------------
  496. ;la seguente variabile stringa indica il tipo di evento musicale corrente;
  497. ; all'inizio e' impostata sull'evento nota
  498. ;the following string variable states the current event; at the beginning is
  499. ; set on the note event
  500. ;-----------------------
  501. TipoDiEvento$="Note"
  502.  
  503. ;-----------------------------------------------------------------------
  504. ;questa variabile indica la posizione della voce Quit del menu' Project
  505. ;this variable marks the position of voice Quit in the Project menu
  506. ;-------------------------------------------------------------------
  507. VoceMenuEsci.b=4
  508.  
  509. ;-----------------------------------------------------------------------
  510. ;queste 5 variabili conterranno i nomi degli ultimi 5 progetti caricati
  511. ;this 5 variables will keep names of last 5 projects loaded
  512. ;-----------------------------------------------------------
  513. Dim ProgettoAperto$(4)
  514.  
  515. ;-----------------------------------------------------------------------------
  516. ;questa struttura di variabili e' una tabella di riferimento per il periodo e
  517. ; la frequenza associati ad ognuna delle 128 note possibili
  518. ;this variables structure is a refferring table for the periode and frequency
  519. ; paired to every one of the 128 given notes
  520. ;--------------------------------------------
  521. NEWTYPE .PeriFreq
  522.  
  523. ;--------
  524. ;periode
  525. ;--------
  526.  Periodo.l
  527.  
  528. ;----------
  529. ;frequency
  530. ;----------
  531.  Frequenza.f
  532. End NEWTYPE
  533. Dim PeriFreq.PeriFreq(127)
  534.  
  535. ;--------------------------------------------------------------------------
  536. ;la seguente struttura di variabili serve per identificare il tipo di note
  537. ;the following variables structure is used to states the notes kind
  538. ;-------------------------------------------------------------------
  539. NEWTYPE .TipoDiNota
  540.  
  541. ;note italian name
  542.  NomeItaliano$
  543.  
  544. ;note english name
  545.  NomeInglese$
  546.  
  547. ;diesis flag
  548.  Diesis.b
  549.  
  550. ;note octave
  551.  Ottava.b
  552. End NEWTYPE
  553. Dim TipoDiNota.TipoDiNota(127)
  554.  
  555. ;----------------------------------------------------------------
  556. ;la seguente struttura di variabili e' per la gestione dei suoni
  557. ;the following variables structure is for sounds management
  558. ;-----------------------------------------------------------
  559. NEWTYPE .Suono
  560.  
  561. ;---------------------------------------------------
  562. ;questa variabile indica il nome del suono caricato
  563. ;this variable states the name of the loaded sound
  564. ;--------------------------------------------------
  565.  Nome$
  566.  
  567. ;----------------------------------------------------------------------------
  568. ;questa variabile indica il canale associato al suono caricato; valore utile
  569. ; da 1 a 16
  570. ;this variable states the channel linked to the loaded sound; useful value
  571. ; from 1 to 16
  572. ;--------------
  573.  Canale.b
  574.  
  575. End NEWTYPE
  576. Dim Suono.Suono(31)
  577.  
  578. NEWTYPE .Sequenza
  579.  
  580. ;--------------------------------------------------
  581. ;questa variabile memorizza il nome della sequenza
  582. ;this variable stores the sequence name
  583. ;---------------------------------------
  584. Nome$
  585.  
  586. ;----------------------------------------------------------
  587. ;questa variabile indica l'inizio temporale della sequenza
  588. ;this variable states the sequence time start
  589. ;---------------------------------------------
  590. Inizio.l
  591.  
  592. ;---------------------------------------------------------
  593. ;questa variabile indica la fine temporale della sequenza
  594. ;this variable states the sequence time end
  595. ;-------------------------------------------
  596. Durata.l
  597.  
  598. ;------------------------------------------------------------------
  599. ;questa variabile indica gli eventi musicali totali della sequenza
  600. ;this variable states the sequence's total musical events
  601. ;---------------------------------------------------------
  602. Eventi.l
  603.  
  604. ;-----------------------------------------------------------------------
  605. ;questa variabile indica gli eventi musicali selezionati della sequenza
  606. ;this variable states the sequence's selected musical events
  607. ;------------------------------------------------------------
  608. EventiSelezionati.l
  609.  
  610. End NEWTYPE
  611. Dim Sequenza.Sequenza(499)
  612.  
  613. ;----------------------------------------------------------------------------
  614. ;la seguente struttura di variabili e' per la gestione degli eventi musicali
  615. ;the following vars structure is for the musical events management
  616. ;------------------------------------------------------------------
  617. NEWTYPE .EventoMusicale
  618.  
  619. ;----------------------------------------------------------------------------
  620. ;questa variabile stringa indica il tipo di evento musicale, che puo' essere
  621. ; una nota od un parametro MIDI
  622. ;This string variable states the musical event kind, that can be a note or a
  623. ; MIDI parameter
  624. ;----------------
  625.  Tipo$
  626.  
  627. ;-----------------------------------------------------------------------
  628. ;se l'evento musicale e' una nota, questa variabile ne indica l'altezza;
  629. ; valore utile da zero a 127
  630. ;if the event is a note, this variable states its height; useful value from
  631. ;zero to 127
  632. ;------------
  633.  Evento.b
  634.  
  635. ;----------------------------------------------------------------------------
  636. ;questa variabile indica la posizione dell'evento musicale nel tempo in tic;
  637. ; valore utile da zero a 2 miliardi e rotti
  638. ;this variable states musical event position in time by ticks; useful value
  639. ;from zero to over 2 billions
  640. ;-----------------------------
  641.  Inizio.l
  642.  
  643. ;------------------------------------------------------------------------------
  644. ;questa varibile indica il canale dell'evento musicale; valore utile da 1 a 16
  645. ;this variable states musical event's channel; useful value from 1 to 16
  646. ;------------------------------------------------------------------------
  647.  Canale.b
  648.  
  649. ;-----------------------------------------------------------------------------
  650. ;questa variabile identifica la sequenza di appartenenza dell'evento musicale
  651. ; valore utile da 1 a 500
  652. ;this variable states the sequence witch the musical event belong to: useful
  653. ; value from 1 to 500
  654. ;---------------------
  655.  Sequenza.w
  656.  
  657. ;------------------------------------------------------------------
  658. ;questa variabile indica se l'evento musicale e' stato selezionato
  659. ;this variable states if the musical event has been selected
  660. ;------------------------------------------------------------
  661.  Selezionato.b
  662.  
  663. ;----------------------------------------------------------------------
  664. ;se l'evento musicale e' una nota, questa variabile indica se e' stata
  665. ; suonata: se il valore e' zero, la nota non e' stata ancora EseguiGliEventita; se il
  666. ; valore e' 1, il programma sta do la nota; se il valore e' 2, il
  667. ; programma ha smesso di suonare la nota
  668. ;if the musical event is a note, this variable states if it has been played:
  669. ; if the value is zero, the note has not been played yet; if the value is 1,
  670. ; the program is playing the note; if the value is 2, the program has finished
  671. ; to play the note
  672. ;------------------
  673.  Eseguito.b
  674.  
  675. ;------------------------------------------------------------------------------
  676. ;se l'evento musicale e' una nota, questa variabile ne indica in tic la durata
  677. ; nel tempo; valore utile da 0 a 2 miliardi e rotti (192 tic=nota di un quarto)
  678. ;if the event is a note, this variable states its duration in time by ticks;
  679. ;useful value from zero to over 2 billions (192 ticks=a quarter note)
  680. ;---------------------------------------------------------------------
  681.  Durata.l
  682.  
  683. ;--------------------------------------------------------------------------
  684. ;se l'evento musicale e'una nota, questa variabile ne indica l'intensita',
  685. ;cioe' il suo volume; se invece l'evento e' un controllo ne indica il valore
  686. ;if the musical event is a note, this variable states its intensity, that is
  687. ; its volume; if instead is a control it states its value
  688. ;---------------------------------------------------------
  689.  Valore.b
  690.  
  691. ;------------------------------------------------------------------------------
  692. ;se l'evento musicale e' una nota, questa variabile indica quale voce AMIGA e'
  693. ; stata usata per suonarla
  694. ;if the musical event si a note, this variable states witch AMIGA voice has
  695. ; been used to play it
  696. ;----------------------
  697.  VoceUsata.b
  698.  
  699. End NEWTYPE
  700.  
  701. DEFTYPE .EventoMusicale NotaSuonata
  702.  
  703. ;-----------------------------------------------------
  704. ;imposta il numero massimo di eventi musicali usabili
  705. ;sets the maximun musical events handling
  706. ;-----------------------------------------
  707. MassimoEventiMusicali.l=Min((FastFree-65536)/SizeOf .EventoMusicale,32768)
  708.  
  709. ;---------------------------------------------------------------------------
  710. ;crea le variabili array lista con la struttura del NEWTYPE .EventoMusicale
  711. ;creates the list array variables with the NEWTYPE .EventoMusicale structure
  712. ;----------------------------------------------------------------------------
  713. Dim List EventoMusicale.EventoMusicale(MassimoEventiMusicali-1)
  714.  
  715. ;-----------------------------------------------------------------
  716. ;questa variabile indica se e' stato attivato un dispoditivo MIDI
  717. ;this variable states if a MIDI device has been activated
  718. ;---------------------------------------------------------
  719. MIDIAttivato.l=0
  720.  
  721. ;--------------------------------------------------------------------------
  722. ;questa procedura imposta la fonte di caratteri Topaz8 per schermo, menu e
  723. ; requester, ma non per le finestre
  724. ;this procedure sets the characters font Topaz8 for screen, menus and
  725. ; requester, but not for windows
  726. ;--------------------------------
  727. Statement CaricaLaFonteDiCaratteriTopaz8{}
  728. SHARED AltezzaFonte
  729.  AltezzaFonte=8:LoadFont #FonteDiCaratteriTopaz8,"topaz.font",AltezzaFonte
  730. End Statement
  731.  
  732. Statement ImpostaIlParlatoDellAmiga{}
  733.  SetVoice 130,250,0,1,64,22200
  734. End Statement
  735.  
  736. Statement CaricaLeImmaginiDelleNote{}
  737.  BitMap 0,126,16,1
  738.  LoadBitMap 0,"Notes.2Cols"
  739.  GetaShape 0,0,0,22,16
  740.  GetaShape 1,23,0,12,16
  741.  GetaShape 2,36,0,12,16
  742.  GetaShape 3,49,0,17,16
  743.  GetaShape 4,67,0,17,16
  744.  GetaShape 5,85,0,17,16
  745.  GetaShape 6,103,0,17,16
  746.  GetaShape 7,121,0,5,16
  747.  Free BitMap 0
  748. End Statement
  749.  
  750. Statement AttivaMIDI{}
  751. SHARED LF$
  752. SHARED MIDIAttivato
  753.  Use Window #FinestraPrincipale
  754.  WJam #DueColoriConSfondoPieno
  755.  Repeat
  756.   If MIDIAttivato=True Then CloseSerial 0
  757.   WLocate 0,0:WColour 0,0:Print SPACE$(80)
  758.   WLocate 0,0:WColour 3:Print "Please type your MIDI device name>"
  759.   DispositivoMIDI$=StripLead$(StripTrail$(Edit$("serial.device",35),Asc(" ")),Asc(" "))
  760.   WLocate 0,0:Print SPACE$(80)
  761.   If DispositivoMIDI$<>""
  762.    MIDIAttivato=OpenSerial(DispositivoMIDI$,0,31250,16)
  763.    If MIDIAttivato=0
  764.     EZRequest "AmySequencer message","Unable to open MIDI"+LF$+"on "+DispositivoMIDI$,"OK"
  765.    Else
  766.     MIDIAttivato=True
  767.    EndIf
  768.   EndIf
  769.  Until MIDIAttivato=True
  770.  EZRequest "AmySequencer message","MIDI has been activated"+LF$+"on "+DispositivoMIDI$,"OK"
  771.  WJam #UnColoreConSfondoTrasparente
  772. End Statement
  773.  
  774. Statement MostraGliEventiMusicaliDisponibili{}
  775. SHARED MassimoEventiMusicali
  776. SHARED Sequenza()
  777. SHARED TotaleEventiMusicali
  778.  TotaleEventiMusicali=0
  779.  For Sequenza.w=1 To 500
  780.   TotaleEventiMusicali+Sequenza(Sequenza-1)\Eventi
  781.  Next Sequenza
  782.  Use Window #FinestraPrincipale
  783.  WLocate 0,0:WColour 3:Print MassimoEventiMusicali," events allocated, ",TotaleEventiMusicali," event"
  784.  If TotaleEventiMusicali<>1 Then Print "s"
  785.  Print " used"
  786. End Statement
  787.  
  788. ;----------------------------------------------------------------------------
  789. ;questa procedura crea una tabella di riconoscimento delle note, memorizzata
  790. ; nell'array TipoDiNota()
  791. ;this procedure crates a referring note recognition table, stored in the
  792. ; TipoDiNota() array (that means Note Kind)
  793. ;-------------------------------------------
  794. Statement ImpostaIlTipoDiNota{Nota.b}
  795. SHARED TipoDiNota()
  796.  
  797. ;--------------------------------------------
  798. ;questa variabile indica l'ottava della nota
  799. ;this variable state the note octave
  800. ;------------------------------------
  801.  OttavaDellaNota.b=Nota/12
  802.  
  803.  TipoDiNota(Nota)\Ottava=OttavaDellaNota
  804.  
  805. ;-----------------------------------------------------------------------
  806. ;questa variabile indica a quali delle 12 note dodici note fondamentali
  807. ; corrisponde la nota corrente
  808. ;this variable marks which of 12 fundamental notes corresponds the current
  809. ; note
  810. ;------
  811.  NotaNellOttava.b=Nota MOD 12
  812.  
  813.  Select NotaNellOttava
  814.  
  815. ;------------------
  816. ;la nota e' un Do?
  817. ;is the given note a C?
  818. ;-----------------------
  819.  Case 0
  820.   TipoDiNota(Nota)\NomeItaliano="Do"
  821.   TipoDiNota(Nota)\NomeInglese="C"
  822.   TipoDiNota(Nota)\Diesis=False
  823.  
  824. ;-------------------------------
  825. ;la nota e' un Do diesis (Do#)?
  826. ;is the given note a C diesis (C#)?
  827. ;-----------------------------------
  828.  Case 1
  829.   TipoDiNota(Nota)\NomeItaliano="Do#"
  830.   TipoDiNota(Nota)\NomeInglese="C#"
  831.   TipoDiNota(Nota)\Diesis=True
  832.  
  833. ;------------------
  834. ;la nota e' un Re?
  835. ;is the given note a D?
  836. ;-----------------------
  837.  Case 2
  838.   TipoDiNota(Nota)\NomeItaliano="Re"
  839.   TipoDiNota(Nota)\NomeInglese="D"
  840.   TipoDiNota(Nota)\Diesis=False
  841.  
  842. ;-------------------------------
  843. ;la nota e' un Re diesis (Re#)?
  844. ;is the given note a D diesis (D#)?
  845. ;-----------------------------------
  846.  Case 3
  847.   TipoDiNota(Nota)\NomeItaliano="Re#"
  848.   TipoDiNota(Nota)\NomeInglese="D#"
  849.   TipoDiNota(Nota)\Diesis=True
  850.  
  851. ;------------------
  852. ;la nota e' un Mi?
  853. ;is the given note a E?
  854. ;-----------------------
  855.  Case 4
  856.   TipoDiNota(Nota)\NomeItaliano="Mi"
  857.   TipoDiNota(Nota)\NomeInglese="E"
  858.   TipoDiNota(Nota)\Diesis=False
  859.  
  860. ;------------------
  861. ;la nota e' un Fa?
  862. ;is the given note a F?
  863. ;-----------------------
  864.  Case 5
  865.   TipoDiNota(Nota)\NomeItaliano="Fa"
  866.   TipoDiNota(Nota)\NomeInglese="F"
  867.   TipoDiNota(Nota)\Diesis=False
  868.  
  869. ;-------------------------------
  870. ;la nota e' un Fa diesis (Fa#)?
  871. ;is the given note a F diesis (F#)?
  872. ;-----------------------------------
  873.  Case 6
  874.   TipoDiNota(Nota)\NomeItaliano="Fa#"
  875.   TipoDiNota(Nota)\NomeInglese="F#"
  876.   TipoDiNota(Nota)\Diesis=True
  877.  
  878. ;-------------------
  879. ;la nota e' un Sol?
  880. ;is the given note a G?
  881. ;-----------------------
  882.  Case 7
  883.   TipoDiNota(Nota)\NomeItaliano="Sol"
  884.   TipoDiNota(Nota)\NomeInglese="G"
  885.   TipoDiNota(Nota)\Diesis=False
  886.  
  887. ;---------------------------------
  888. ;la nota e' un Sol diesis (Sol#)?
  889. ;is the given note a G diesis (G#)?
  890. ;-----------------------------------
  891.  Case 8
  892.   TipoDiNota(Nota)\NomeItaliano="Sol#"
  893.   TipoDiNota(Nota)\NomeInglese="G#"
  894.   TipoDiNota(Nota)\Diesis=True
  895.  
  896. ;------------------
  897. ;la nota e' un La?
  898. ;is the given note an A?
  899. ;------------------------
  900.  Case 9
  901.   TipoDiNota(Nota)\NomeItaliano="La"
  902.   TipoDiNota(Nota)\NomeInglese="A"
  903.   TipoDiNota(Nota)\Diesis=False
  904.  
  905. ;-------------------------------
  906. ;la nota e' un La diesis (La#)?
  907. ;is the given note an A diesis (A#)?
  908. ;------------------------------------
  909.  Case 10
  910.   TipoDiNota(Nota)\NomeItaliano="La#"
  911.   TipoDiNota(Nota)\NomeInglese="A#"
  912.   TipoDiNota(Nota)\Diesis=True
  913.  
  914. ;------------------
  915. ;la nota e' un Si?
  916. ;is the given note a B?
  917. ;-----------------------
  918.  Case 11
  919.   TipoDiNota(Nota)\NomeItaliano="Si"
  920.   TipoDiNota(Nota)\NomeInglese="B"
  921.   TipoDiNota(Nota)\Diesis=False
  922.  
  923.  End Select
  924. End Statement
  925.  
  926. Statement CalcolaLaFrequenzaEdIlPeriodoDelleNote{}
  927. SHARED PeriFreq()
  928. SHARED DistanzaSemitono
  929. ;--------------------------------------------------------------------------------
  930. ;per ottenere la frequenza di tutte le 128 note, si parte dal La della 2a ottava
  931. ; (la prima e' l'ottava zero), la cui frequenza e' nota e la si moltiplica o
  932. ; divide per la distanza minima tra due note che e' il semitono; per ottenere il
  933. ; periodo si divide una delle costanti di temporizzazione, a seconda che il
  934. ; il proprio AMIGA usi uno schermo PAL o NTSC, per la frequenza della nota; queste
  935. ; costanti sono riportate sul MANUALE DI RIFERIMENTO PER L'HARDWARE AMIGA.
  936. ;to obtain all 128 notes it starts from the A from the 3rd octave (the 1st is the
  937. ; zero octave) that has a known frequency, and it multiply or divide this for the
  938. ; minimum distance between two notes that is the semitone; to obtain the period it
  939. ; divides one of the timing constants, depending on your AMIGA uses a PAL or NTSC
  940. ; screen, for the note frequency; these constants are reported the AMIGA HARDWARE
  941. ; REFERENCE MANUAL
  942. ;------------------
  943. PeriFreq(45)\Frequenza=440
  944. If NTSC=True
  945.  PeriFreq(45)\Periodo=#TemporizzazioneNTSC/PeriFreq(45)\Frequenza
  946. Else
  947.  PeriFreq(45)\Periodo=#TemporizzazionePAL/PeriFreq(45)\Frequenza
  948. EndIf
  949. ImpostaIlTipoDiNota{45}
  950.  
  951. For Nota.w=46 To 127
  952.  PeriFreq(Nota)\Frequenza=PeriFreq(Nota-1)\Frequenza*DistanzaSemitono
  953.  If NTSC=True
  954.   PeriFreq(Nota)\Periodo=#TemporizzazioneNTSC/PeriFreq(Nota)\Frequenza
  955.  Else
  956.   PeriFreq(Nota)\Periodo=#TemporizzazionePAL/PeriFreq(Nota)\Frequenza
  957.  EndIf
  958.  ImpostaIlTipoDiNota{Nota}
  959. Next Nota
  960.  
  961. For Nota=44 To 0 Step -1
  962.  PeriFreq(Nota)\Frequenza=PeriFreq(Nota+1)\Frequenza/DistanzaSemitono
  963.  If NTSC=True
  964.   PeriFreq(Nota)\Periodo=#TemporizzazioneNTSC/PeriFreq(Nota)\Frequenza
  965.  Else
  966.   PeriFreq(Nota)\Periodo=#TemporizzazionePAL/PeriFreq(Nota)\Frequenza
  967.  EndIf
  968.  ImpostaIlTipoDiNota{Nota}
  969. Next Nota
  970. End Statement
  971.  
  972. ;-----------------------------------------------------------------------------
  973. ;la seguente procedura converte un valore temporale da tic in battute, quarti
  974. ; e tic; la variabile OrigineZero serve per la differente visualizzazione
  975. ; della durata delle note che parte da zero
  976. ;the following procedure converts a time value from tcksin bars, quarters and
  977. ; ticks; the OrigineZero variable is used for the different note length
  978. ; displaying that starts from zero
  979. ;----------------------------------
  980. Statement ConvertiIlTempoInBattute{Tempo.l,OrigineZero.b}
  981.  If OrigineZero=True
  982.   Battute.w=Tempo/(192*4)
  983.   Quarti=((Tempo/192) MOD 4)
  984.  Else
  985.   Battute=Tempo/(192*4)+1
  986.   Quarti=((Tempo/192) MOD 4)+1
  987.  EndIf
  988.  Print Battute,".",Quarti
  989.  Tic.w=Tempo MOD 192
  990.  If Tic>0 Then Print ".",Tic
  991. End Statement
  992.  
  993. ;-------------------------------------------------
  994. ;questa procedura imposta le barre di scorrimento
  995. ;this procedure sets sliders
  996. ;----------------------------
  997. Statement ImpostaSlider{Slider.l,XPos.w,YPos.w,Orientamento$,Parametri.l,ListaGadgetSlider.l}
  998. SHARED XLunSlider
  999. SHARED YLunSlider
  1000.  Orientamento$=UCase$(Orientamento$)
  1001.  If Orientamento$="HORIZONTAL" Then Parametri+#MovimentoOrizzontale
  1002.  If Orientamento$="VERTICAL" Then Parametri+#MovimentoVerticale
  1003.  PropGadget ListaGadgetSlider,XPos,YPos,Parametri,Slider,XLunSlider,YLunSlider
  1004. End Statement
  1005.  
  1006. ;--------------------------------------------------
  1007. ;questa procedura gestisce le barre di scorrimento
  1008. ;this procedure manages the sliders
  1009. ;-----------------------------------
  1010. Statement MostraSlider{Slider.l,ValoreDato.l,ValoreMassimo.l,Orientamento$,ListaGadgetSlider.l,FinestraSlider.l}
  1011.  Orientamento$=UCase$(Orientamento$)
  1012.  If Orientamento$="HORIZONTAL"
  1013.   SetHProp ListaGadgetSlider,Slider,ValoreDato/ValoreMassimo,1/ValoreMassimo
  1014.  EndIf
  1015.  If Orientamento$="VERTICAL"
  1016.   SetVProp ListaGadgetSlider,Slider,ValoreDato/ValoreMassimo,1/ValoreMassimo
  1017.  EndIf
  1018.  Redraw FinestraSlider,Slider
  1019. End Statement
  1020.  
  1021. ;--------------------------------------------------
  1022. ;questa procedura gestisce le barre di scorrimento
  1023. ;this procedure manage the sliders
  1024. ;----------------------------------
  1025. Function .l ValoreSlider{Slider.l,ValoreMassimo.l,LunghezzaSlider.l,Orientamento$,ListaGadgetSlider.l}
  1026.  Orientamento$=UCase$(Orientamento$)
  1027.  If Orientamento$="HORIZONTAL"
  1028.   ValoreSlider.f=HPropPot(ListaGadgetSlider,Slider)*ValoreMassimo
  1029.   ValoreIndicatoDalTopo.w=EMouseX*ValoreMassimo/LunghezzaSlider
  1030.  EndIf
  1031.  If Orientamento$="VERTICAL"
  1032.   ValoreSlider=VPropPot(ListaGadgetSlider,Slider)*ValoreMassimo
  1033.   ValoreIndicatoDalTopo=EMouseY*ValoreMassimo/LunghezzaSlider
  1034.  EndIf
  1035.  ValoreIndicatoDalloSlider.l=Int(ValoreSlider)
  1036.  If ValoreIndicatoDalTopo>ValoreIndicatoDalloSlider Then ValoreIndicatoDalloSlider+1
  1037.  If ValoreIndicatoDalTopo<ValoreIndicatoDalloSlider Then ValoreIndicatoDalloSlider-1
  1038.  ValoreIndicatoDalloSlider=Min(Max(ValoreIndicatoDalloSlider,0),ValoreMassimo)
  1039.  Function Return ValoreIndicatoDalloSlider
  1040. End Function
  1041.  
  1042. ;--------------------------------------------------------------
  1043. ;questa procedura cancella il file storico dei progetti aperti
  1044. ;this procedure clears the loaded projects history file
  1045. ;-------------------------------------------------------
  1046. Statement CancellaLaStoriaDeiProgettiAperti{}
  1047. SHARED ProgettoAperto$()
  1048. SHARED StoriaDeiProgettiAperti
  1049. SHARED VoceMenuEsci
  1050.  KillFile "ProjectsHistory"
  1051.  VoceMenuEsci=4
  1052.  StoriaDeiProgettiAperti=False
  1053.  For ProgettoAperto.b=0 To 4
  1054.   ProgettoAperto$(ProgettoAperto)=""
  1055.  Next ProgettoAperto
  1056. End Statement
  1057.  
  1058. ;------------------------------------------------------------
  1059. ;questa procedura carica il file storico dei progetti aperti
  1060. ;this procedure loads the loaded projects history file
  1061. ;------------------------------------------------------
  1062. Statement CaricaLaStoriaDeiProgettiAperti{}
  1063. SHARED ProgettoAperto$()
  1064. SHARED StoriaDeiProgettiAperti
  1065. SHARED VoceMenuEsci
  1066.  StoriaDeiProgettiAperti=ReadFile(0,"ProjectsHistory")
  1067.  If StoriaDeiProgettiAperti=True
  1068.   FileInput 0
  1069.   ProgettoAperto=0
  1070.   Repeat
  1071.    Dato$=Inkey$
  1072.    If Dato$=Chr$(10)
  1073.     ProgettoAperto+1
  1074.     VoceMenuEsci+1
  1075.    Else
  1076.     ProgettoAperto$(ProgettoAperto)+Dato$
  1077.    EndIf
  1078.   Until Dato$=""
  1079.   CloseFile 0
  1080.   PopInput
  1081.  EndIf
  1082. End Statement
  1083.  
  1084. Statement CaricaLaBitmapDiSfondo{}
  1085.  
  1086. ;----------------------------------------
  1087. ;crea la bitmap per l'immagine di sfondo
  1088. ;creates the bitmap for the background pic
  1089. ;------------------------------------------
  1090.  BitMap #BitmapImmagineDiSfondo,640,240,4
  1091.  
  1092. ;------------------------------------
  1093. ;inizializza la tavolozza dei colori
  1094. ;initializes colours palette
  1095. ;----------------------------
  1096.  InitPalette #TavolozzaDeiColori,16
  1097.  
  1098. ;------------------------------------------------------------------------------
  1099. ;carica l'immagine di sfondo per la finestra principale nella bitmap creata per
  1100. ; questa
  1101. ;loads the main window background image into the bitmap creted for it
  1102. ;-------------------------------------------------------
  1103.  LoadBitMap #BitmapImmagineDiSfondo,"BackgroundPic.16Cols",#TavolozzaDeiColori
  1104.  
  1105. End Statement
  1106.  
  1107. ;------------------------------------
  1108. ;questa procedura imposta lo schermo
  1109. ;this procedure sets the screen
  1110. ;-------------------------------
  1111. Statement ImpostaLoSchermo{}
  1112. SHARED AltezzaFonte
  1113. SHARED AltezzaSchermo
  1114. SHARED LarghezzaSchermo
  1115. SHARED SequenzeVisibili
  1116.  
  1117. ;--------------------------------------
  1118. ;imposta la fonte di caratteri globale
  1119. ;sets the global characters font
  1120. ;--------------------------------
  1121.  Use IntuiFont #FonteDiCaratteriTopaz8
  1122.  
  1123. ;-------------------------------
  1124. ;carica i colori per lo schermo
  1125. ;loads colours for screen
  1126. ;-------------------------
  1127. ; For Colore.b=0 To 15
  1128. ;  Read Rosso.b
  1129. ;  Read Verde.b
  1130. ;  Read Blu.b
  1131. ;  PalRGB #TavolozzaDeiColori,Colore,Rosso,Verde,Blu
  1132. ; Next Colore
  1133.  
  1134. ;----------------------------------------------------------------
  1135. ;imposta le penne dello schermo con i migliori colori (ROM 2.0+)
  1136. ;sets screen pens with best colours (ROM 2.0+)
  1137. ;----------------------------------------------
  1138.  ScreenPens 3,2,0,1,3,1,2
  1139.  
  1140. ;------------------------------------------------
  1141. ;apre lo schermo in alta risoluzione a 16 colori
  1142. ;opens high resolution screen with 16 colours
  1143. ;---------------------------------------------
  1144.  Screen 0,4+8,"AmySequencer by Stefano Maria Regattin"
  1145.  
  1146. ;-----------------------------
  1147. ;usa la tavolozza dei colori
  1148. ;use colours palette
  1149. ;--------------------
  1150.  Use Palette #TavolozzaDeiColori
  1151.  
  1152. ;-------------------------------------------------------------------------------
  1153. ;questa variabile contiene l'indirizzo di memoria della struttura dello schermo
  1154. ;this variable retains the screen structure memory address
  1155. ;----------------------------------------------------------
  1156. IndirizzoSchermo.l=Peek.l(Addr Screen(0))
  1157.  
  1158. ;----------------------------------------------------------
  1159. ;questa variabile contiene la vera larghezza Dello schermo
  1160. ;this variable retains the true screen width
  1161. ;--------------------------------------------
  1162. LarghezzaSchermo=Peek.w(IndirizzoSchermo+12)
  1163.  
  1164. ;--------------------------------------------------------
  1165. ;questa variabile contiene la vera altezza dello schermo
  1166. ;this variable retains the true screen height
  1167. ;---------------------------------------------
  1168. AltezzaSchermo=Peek.w(IndirizzoSchermo+14)
  1169.  
  1170. ;---------------------------------------------------------------------
  1171. ;questa variabile indica il massimo numero di sequenze visualizzabili
  1172. ;this variable states the displayed sequences maximum number
  1173. ;------------------------------------------------------------
  1174. SequenzeVisibili.b=(AltezzaSchermo-(AltezzaFonte+3)-8-8-8)/8
  1175.  
  1176. End Statement
  1177.  
  1178. ;-----------------------------------------------------------------------
  1179. ;questa procedura mostra l'immagine di sfondo nella finestra principale
  1180. ;this procedure shows the  background pic into the main window
  1181. ;--------------------------------------------------------------
  1182. Statement MettiLImmagineDiSfondoNellaFinestraPrincipale{}
  1183. SHARED AltezzaFonte
  1184. SHARED AltezzaSchermo
  1185.  
  1186. ;-----------------------------------------------------------
  1187. ;copia l'immamginea dalla bitmap nella finestra principale
  1188. ;copies the pic from the bitmap into the main window
  1189. ;----------------------------------------------------
  1190.  BitMaptoWindow #BitmapImmagineDiSfondo,#FinestraPrincipale,0,0,0,0,640,240
  1191.  
  1192. End Statement
  1193.  
  1194. ;-------------------------------------------------------------------------------
  1195. ;Questa procedura imposta la finestra principale invisibile e reimposta il menu
  1196. ; principale
  1197. ;this procedure sets the main invisible window and resets the main menu
  1198. ;-----------------------------------------------------------------------
  1199. Statement ImpostaLaFinestraPrincipale{}
  1200. SHARED AltezzaFonte
  1201. SHARED AltezzaSchermo
  1202. SHARED BattuteAlMinuto
  1203. SHARED FinestraPrincipaleAperta
  1204. SHARED LarghezzaSchermo
  1205. SHARED ProgettoAperto$()
  1206. SHARED SequenzeVisibili
  1207. SHARED StoriaDeiProgettiAperti
  1208. SHARED TicPerCinquantesimoDiSecondo
  1209. SHARED VoceMenuEsci
  1210. SHARED XLunSlider
  1211. SHARED YLunSlider
  1212.  
  1213. ;-----------------------------------------------
  1214. ;se la finestra era gia' stato aperto la chiude
  1215. ;if window was opened it close it
  1216. ;---------------------------------
  1217.  If FinestraPrincipaleAperta=True
  1218.   BeepScreen 0
  1219.   Free GadgetList #ListaGadgetPrincipale
  1220.   Free MenuList #ListaMenuPrincipale
  1221.   CloseWindow #FinestraPrincipale
  1222.  EndIf
  1223.  
  1224. ;-----------------------------------------------------------------------
  1225. ;imposta il colore del testo nei menu' a quello piu' chiaro disponibile
  1226. ;sets text menu colour to the brightest available
  1227. ;-------------------------------------------------
  1228.  MenuColour 3
  1229.  
  1230. ;-------------------------
  1231. ;imposta il menu' Project
  1232. ;sets Project menu
  1233. ;------------------
  1234.  MenuTitle #ListaMenuPrincipale,0,"Project"
  1235.  MenuItem #ListaMenuPrincipale,0,0,0,"New"
  1236.  MenuItem #ListaMenuPrincipale,0,0,1,"Load"
  1237.  MenuItem #ListaMenuPrincipale,0,0,2,"Save"
  1238.  MenuItem #ListaMenuPrincipale,0,0,3,"Save as"
  1239.  If StoriaDeiProgettiAperti=True
  1240.   For ProgettoAperto.b=4 To VoceMenuEsci-1
  1241.    MenuItem 0,0,0,ProgettoAperto,ProgettoAperto$(ProgettoAperto-4)
  1242.   Next ProgettoAperto
  1243.  EndIf
  1244.  MenuItem 0,0,0,VoceMenuEsci,"Quit"
  1245.  
  1246. ;--------------------------
  1247. ;imposta il menu' Controls
  1248. ;sets Controls menu
  1249. ;------------------
  1250.  MenuTitle #ListaMenuPrincipale,1,"Controls"
  1251.  MenuItem #ListaMenuPrincipale,0,1,0,"Play"
  1252.  
  1253. ;-------------------------
  1254. ;imposta il menu' Windows
  1255. ;sets Windows menu
  1256. ;------------------
  1257.  MenuTitle #ListaMenuPrincipale,2,"Windows"
  1258.  MenuItem #ListaMenuPrincipale,0,2,0,"Sounds Editor"
  1259.  MenuItem #ListaMenuPrincipale,0,2,1,"Sequence Editor"
  1260.  
  1261. ;-----------------------
  1262. ;imposta il menu' Prefs
  1263. ;sets Prefs menu
  1264. ;----------------
  1265.  MenuTitle #ListaMenuPrincipale,3,"Prefs"
  1266.  MenuItem #ListaMenuPrincipale,0,3,0,"Set MIDI device"
  1267.  MenuItem #ListaMenuPrincipale,0,3,1,"Clear projects history"
  1268.  
  1269. ;-------------------------------------------------------------------
  1270. ;apre la finestra principale per ricavarne la larghezza e l'altezza
  1271. ;opens main window to obtain its width and height
  1272. ;-------------------------------------------------
  1273.  XPosF.w=0:YPosF.w=AltezzaFonte+3:XLunF.w=LarghezzaSchermo:YLunF.w=AltezzaSchermo-(AltezzaFonte+3)
  1274.  TipoFinestra.l=#FinestraDiSfondo+#FinestraSenzaBordi+#FinestraAttivata
  1275.  Window #FinestraPrincipale,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"",-1,-1
  1276.  
  1277.  MettiLImmagineDiSfondoNellaFinestraPrincipale{}
  1278.  
  1279. ;-------------------------------------------------------------------------
  1280. ;questa variabile conserva la larghezza interna della finestra principale
  1281. ;this variable stores the inner witdh of the main window
  1282. ;--------------------------------------------------------
  1283.  LarghezzaInternaFinestraPrincipale.w=InnerWidth
  1284.  
  1285. ;----------------------------------------------------------------------
  1286. ;questa variabile conserva l'altezza interna della finestra principale
  1287. ;this variable stores the inner height of the main window
  1288. ;---------------------------------------------------------
  1289.  AltezzaInternaFinestraPrincipale.w=InnerHeight
  1290.  
  1291.  CloseWindow #FinestraPrincipale
  1292.  
  1293. ;----------------------------------------------------------------------
  1294. ;imposta la barra di scorrimento che regola la velocita' di esecuzione
  1295. ;sets the slider that tunes the execution velocity
  1296. ;_-------------------------------------------------
  1297.  XLunSlider=LarghezzaInternaFinestraPrincipale
  1298.  YLunSlider=8
  1299.  ImpostaSlider{1,0,AltezzaInternaFinestraPrincipale-8,"HORIZONTAL",0,#ListaGadgetPrincipale}
  1300.  
  1301. ;-----------------------------------------------------------------------
  1302. ;imposta la barra di scorrimento che serve per visualizzare le sequenze
  1303. ;sets the slider that is used to shows the sequences
  1304. ;_---------------------------------------------------
  1305.  XLunSlider=16
  1306.  YLunSlider=SequenzeVisibili*8
  1307.  ImpostaSlider{2,0,8,"VERTICAL",0,#ListaGadgetPrincipale}
  1308.  
  1309. ;------------------------------------------------------------------------------
  1310. ;apre la finestra principale solo per il menu' come invisibile e ci attacca la
  1311. ; lista dei gadget principale
  1312. ;opens main window for menu usage only as invisible and it attaches the main
  1313. ; gadget list
  1314. ;-------------
  1315.  Window #FinestraPrincipale,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"",-1,-1,#ListaGadgetPrincipale
  1316.  
  1317. ;-------------------------------
  1318. ;attacca il menu' alla finestra
  1319. ;attaches menu to window
  1320. ;------------------------
  1321.  SetMenu #ListaMenuPrincipale
  1322.  
  1323. ;----------------------------------------------
  1324. ;imposta la fonte di caratteri per la finestra
  1325. ;sets the font for the window
  1326. ;-----------------------------
  1327.  WindowFont #FonteDiCaratteriTopaz8
  1328.  
  1329.  WJam #UnColoreConSfondoTrasparente
  1330.  
  1331.  MettiLImmagineDiSfondoNellaFinestraPrincipale{}
  1332.  
  1333. ;-------------------------------------------------------------------------
  1334. ;imposta la barra di scorrimento della velocita' di esecuzione delle note
  1335. ;sets the notes execution velocity slider
  1336. ;-----------------------------------------
  1337.  XLunSlider=LarghezzaInternaFinestraPrincipale
  1338.  MostraSlider{1,BattuteAlMinuto-10,300-9,"HORIZONTAL",#ListaGadgetPrincipale,#FinestraPrincipale}
  1339.  
  1340. ;-------------------------------------------------------------------
  1341. ;mostra la velocita' di esecuzione delle note in battute per minuto
  1342. ;shows the execution velocity in bar per minute
  1343. ;-----------------------------------------------
  1344.  WLocate 0,AltezzaInternaFinestraPrincipale-8-8:WColour 3
  1345.  Print "BPM>",BattuteAlMinuto," Ticks/50th>",TicPerCinquantesimoDiSecondo
  1346.  
  1347. ;----------------------------
  1348. ;mostra le sequenze visibili
  1349. ;shows the visible sequences
  1350. ;----------------------------
  1351.  MostraSlider{2,PrimaSequenzaDaVisualizzare,499-SequenzeVisibili,"VERTICAL",#ListaGadgetPrincipale,#FinestraPrincipale}
  1352.  
  1353. ;-----------------------------------------------------------------
  1354. ;le finestre di richiesta sono assegnate alla finestra principale
  1355. ;the request windows are assigned to main window
  1356. ;------------------------------------------------
  1357.  EZOutput #FinestraPrincipale
  1358.  
  1359.  FinestraPrincipaleAperta=True
  1360.  
  1361. End Statement
  1362.  
  1363. ;--------------------------------------------------------------------------
  1364. ;questa procedura per ora legge solo il nome di un file e o inserisce nel
  1365. ; menu principale; dovrebbe caricare un progetto di AmySequencer
  1366. ;this procedure till now only reads a file name and put it into the main menu
  1367. ; it should load an AmySequencer project
  1368. ;----------------------------------------
  1369. Statement CaricaUnProgetto{}
  1370. SHARED ProgettoAperto$()
  1371. SHARED StoriaDeiProgettiAperti
  1372. SHARED VoceMenuEsci
  1373.  MaxLen P$=160
  1374.  MaxLen F$=64
  1375.  ProgettoAperto$=FileRequest$("Load AmySequencer project",P$,F$)
  1376.  If ProgettoAperto$<>""
  1377.   For ProgettoAperto.b=0 To 4
  1378.    If ProgettoAperto$=ProgettoAperto$(ProgettoAperto) Then Statement Return
  1379.   Next ProgettoAperto
  1380.   For ProgettoAperto=3 To 0 Step -1
  1381.    ProgettoAperto$(ProgettoAperto+1)=ProgettoAperto$(ProgettoAperto)
  1382.   Next ProgettoAperto
  1383.   ProgettoAperto$(0)=ProgettoAperto$
  1384.   StoriaDeiProgettiAperti=WriteFile(0,"ProjectsHistory")
  1385.   If StoriaDeiProgettiAperti=True
  1386.    FileOutput 0
  1387.    For ProgettoAperto=0 To 4
  1388.     If ProgettoAperto$(ProgettoAperto)<>""
  1389.      NPrint ProgettoAperto$(ProgettoAperto)
  1390.     EndIf
  1391.    Next ProgettoAperto
  1392.    CloseFile 0
  1393.    PopOutput
  1394.    VoceMenuEsci+1
  1395.   EndIf
  1396.  EndIf
  1397. End Statement
  1398.  
  1399. ;-----------------------------------------------------------
  1400. ;questa procedura imposta i suoni da usare con il programma
  1401. ;this procedure sets sounds to use with program
  1402. ;-----------------------------------------------
  1403. Statement EditoreSuoni{}
  1404. SHARED AltezzaFonte
  1405. SHARED AltezzaSchermo
  1406. SHARED LarghezzaSchermo
  1407. SHARED LF$
  1408. SHARED PercorsoSuoni$
  1409. SHARED Suono()
  1410. SHARED XLunSlider
  1411. SHARED YLunSlider
  1412.  
  1413. ;-----------------------------------------------------------------------
  1414. ;imposta il colore del testo nei menu' a quello piu' chiaro disponibile
  1415. ;sets text menu colour to the brightest available
  1416. ;-------------------------------------------------
  1417.  MenuColour 3
  1418.  
  1419.  MenuTitle #ListaMenuEditoreSuoni,0,"Sounds"
  1420.  MenuItem #ListaMenuEditoreSuoni,0,0,0,"Load"
  1421.  MenuItem #ListaMenuEditoreSuoni,0,0,1,"Discard"
  1422.  
  1423.  XPosF.w=0:YPosF.w=AltezzaFonte+3:XLunF.w=LarghezzaSchermo:YLunF.w=AltezzaSchermo-(AltezzaFonte+3)
  1424.  TipoFinestra.l=#GadgetChiudiFinestra+#DammiZeroZero+#FinestraAttivata
  1425.  Window #FinestraEditoreSuoni,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"Sounds Editor",-1,-1
  1426.  LarghezzaInternaFinestraEditoreSuoni.w=InnerWidth
  1427.  AltezzaInternaFinestraEditoreSuoni.w=InnerHeight
  1428.  CloseWindow #FinestraEditoreSuoni
  1429.  
  1430. ;-------------------------------------------------------------------------------
  1431. ;imposta la barra di scorrimento che serve per visualizzare i suoni disponibili
  1432. ;sets the slider that is used to show the available sounds
  1433. ;_---------------------------------------------------------
  1434.  XLunSlider=16
  1435.  YLunSlider=AltezzaInternaFinestraEditoreSuoni
  1436.  ImpostaSlider{1,LarghezzaInternaFinestraEditoreSuoni-16,0,"VERTICAL",0,#ListaGadgetEditoreSuoni}
  1437.  
  1438.  Window #FinestraEditoreSuoni,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"Sounds Editor",-1,-1,#ListaGadgetEditoreSuoni
  1439.  
  1440. ;-------------------------------
  1441. ;attacca il menu' alla finestra
  1442. ;attaches menu to window
  1443. ;------------------------
  1444.  SetMenu #ListaMenuEditoreSuoni
  1445.  
  1446. ;----------------------------------------------
  1447. ;imposta la fonte di caratteri per la finestra
  1448. ;sets the font for the window
  1449. ;-----------------------------
  1450.  WindowFont #FonteDiCaratteriTopaz8
  1451.  
  1452.  WJam #DueColoriConSfondoPieno
  1453.  
  1454. ;----------------------------------
  1455. ;sounds window's displaying  start
  1456. ;----------------------------------
  1457.  InizioSuoni.b=0
  1458.  
  1459. ;------------------------
  1460. ;maximum strings length
  1461. ;------------------------
  1462.  LunghezzaMassimaStringhe.b=(LarghezzaInternaFinestraEditoreSuoni-16)/8
  1463.  
  1464. ;-----------------------------
  1465. ;stated by mouse sound number
  1466. ;-----------------------------
  1467.   SuonoIndicatoDalTopo.b=-1
  1468.  
  1469. ;-------------------------------------------------------------------------
  1470. ;imposta la barra di scorrimento della velocita' di esecuzione delle note
  1471. ;sets the notes execution velocity slider
  1472. ;-----------------------------------------
  1473.  YLunSlider=AltezzaInternaFinestraEditoreSuoni
  1474.  MostraSlider{1,InizioSuoni,2,"VERTICAL",#ListaGadgetEditoreSuoni,#FinestraEditoreSuoni}
  1475.  
  1476.  Repeat
  1477.   WCls
  1478.  
  1479.   If SuoniCaricati.b>31 Then Enable #ListaGadgetEditoreSuoni,1 Else Disable #ListaGadgetEditoreSuoni,1
  1480.   Redraw #FinestraEditoreSuoni,1
  1481.  
  1482.   WLocate 0,0
  1483.  
  1484. ;----------------------
  1485. ;loaded sounds counter
  1486. ;----------------------
  1487.   SuoniCaricati=0
  1488.  
  1489.   For Suono.b=0 To 30
  1490.    AssegnamentoSuono$=Suono(InizioSuoni+Suono)\Nome
  1491.    If AssegnamentoSuono$<>""
  1492.     CanaleSuono.b=Suono(InizioSuoni+Suono)\Canale
  1493.     If CanaleSuono>0 Then WColour CanaleSuono-1,16-CanaleSuono Else WColour 1,0
  1494.     Format "00"
  1495.     If CanaleSuono>0 Then CanaleSuono$=" channel "+Str$(CanaleSuono) Else CanaleSuono$=" no channel"
  1496.     Format""
  1497.     AssegnamentoSuono$+CanaleSuono$
  1498.     AssegnamentoSuono$=Right$(AssegnamentoSuono$,LunghezzaMassimaStringhe)
  1499.     AssegnamentoSuono$+SPACE$(LunghezzaMassimaStringhe-Len(AssegnamentoSuono$))
  1500.     NPrint AssegnamentoSuono$
  1501.     SuoniCaricati+1
  1502.    EndIf
  1503.   Next Suono
  1504.   EventoFinestraEditoreSuoni.l=WaitEvent
  1505.   Select EventoFinestraEditoreSuoni
  1506.   Case #HaiPremutoUnTastoDelTopo
  1507.    TastoCliccatoDelTopo.b=MButtons:YTopo=WMouseY
  1508.    If TastoCliccatoDelTopo=1
  1509.     SuonoIndicatoDalTopo=YTopo/8+InizioSuoni
  1510.     If SuoniCaricati>0 AND SuonoIndicatoDalTopo<SuoniCaricati
  1511.      CanaleSuono.b=Suono(SuonoIndicatoDalTopo)\Canale
  1512.      CanaleSuono+1:If CanaleSuono=17 Then CanaleSuono=0
  1513.      Suono(SuonoIndicatoDalTopo)\Canale=CanaleSuono
  1514.     EndIf
  1515.     FlushEvents #HaiPremutoUnTastoDelTopo
  1516.    EndIf
  1517.   Case #HaiPremutoUnGadget
  1518.    If SuoniCaricati>31
  1519.     InizioSuoni=ValoreSlider{1,2,AltezzaInternaFinestraEditoreSuoni,"VERTICAL",#ListaGadgetEditoreSuoni}
  1520.    EndIf
  1521.   Case #HaiRilasciatoUnGadget
  1522.    If SuoniCaricati>31
  1523.     InizioSuoni=ValoreSlider{1,2,AltezzaInternaFinestraEditoreSuoni,"VERTICAL",#ListaGadgetEditoreSuoni}
  1524.    EndIf
  1525.   Case #HaiAttivatoIlMenu
  1526.    If MenuHit=0 AND ItemHit=0
  1527.     If SuoniCaricati<32
  1528.      MaxLen PercorsoSuoni$=160
  1529.      MaxLen NomeSuono$=64
  1530.      NomeSuono$=FileRequest$("Load a sound...",PercorsoSuoni$,NomeSuono$)
  1531.      If NomeSuono$<>""
  1532.       StessoSuono.b=False
  1533.       If SuoniCaricati>0
  1534.        For SuonoPrecedente=0 To SuoniCaricati-1
  1535.         If NomeSuono$=Suono(SuonoPrecedente)\Nome Then StessoSuono=True
  1536.        Next SuonoPrecedente
  1537.       EndIf
  1538.       If StessoSuono=False
  1539.        Suono=SuoniCaricati
  1540.        LoadSound Suono,NomeSuono$
  1541.        Suono(Suono)\Nome=NomeSuono$
  1542.        Sound Suono,3
  1543.       EndIf
  1544.      EndIf
  1545.     EndIf
  1546.    EndIf
  1547.    If MenuHit=0 AND ItemHit=1
  1548.     If SuoniCaricati>0 AND SuonoIndicatoDalTopo<SuoniCaricati AND SuonoIndicatoDalTopo>-1
  1549.      Suono=SuonoIndicatoDalTopo
  1550.      Free Sound Suono
  1551.      Suono(Suono)\Nome=""
  1552.      While Suono+1<SuoniCaricati
  1553.       Suono(Suono)\Nome=Suono(Suono+1)\Nome
  1554.       Suono(Suono)\Canale=Suono(Suono+1)\Canale
  1555.       Suono+1
  1556.      Wend
  1557.      Suono(Suono)\Nome=""
  1558.      Suono(Suono)\Canale=0
  1559.      SuonoIndicatoDalTopo=-1
  1560.     EndIf
  1561.    EndIf
  1562.   Case #HaiChiusoLaFinestra
  1563.    SuoniAssegnatiAlloStessoCanale.b=False
  1564.    For SuonoUno.b=0 To 31
  1565.     For SuonoDue.b=0 To 31
  1566.      If SuonoUno<>SuonoDue
  1567.       If Suono(SuonoUno)\Canale>0 AND Suono(SuonoUno)\Canale=Suono(SuonoDue)\Canale
  1568.        SuoniAssegnatiAlloStessoCanale=True
  1569.       EndIf
  1570.      EndIf
  1571.     Next SuonoDue
  1572.    Next SuonoUno
  1573.    If SuoniAssegnatiAlloStessoCanale=True
  1574.     Messaggio$="You have two or more sounds"+LF$+"assigned to the same channel;"+LF$+"please adjust all better!"
  1575.     EZRequest "AmySequencer message",Messaggio$,"OK"
  1576.    Else
  1577.     EsciDallEditoreSuoni.b=True
  1578.    EndIf
  1579.   Case #HaiPremutoUnTasto
  1580.    TastoPremuto$=LCase$(Inkey$)
  1581.    Select TastoPremuto$
  1582.    Case TastoEsc$
  1583.     EsciDallEditoreSuoni=True
  1584.    Case TastoCursoreSu$
  1585.    Case TastoCursoreGiu$
  1586.    End Select
  1587.   End Select
  1588.  Until EsciDallEditoreSuoni=True
  1589.  CloseWindow #FinestraEditoreSuoni
  1590.  Use Window #FinestraPrincipale
  1591.  WJam #UnColoreConSfondoTrasparente
  1592. End Statement
  1593.  
  1594. ;-----------------------------------------------------
  1595. ;questa procedura cancella a video un evento musicale
  1596. ;this procedure clears on screen a musical event
  1597. ;------------------------------------------------
  1598. Statement CancellaUnEventoMusicale{TipoDiEvento$,Evento.b,InizioEvento.l,DurataEvento.l,EventoSelezionato.b}
  1599. SHARED AltezzaInternaFinestraEditoreSequenza
  1600. SHARED AreaInvisibileDelleNote
  1601. SHARED AreaVisibileDeiValori
  1602. SHARED LarghezzaInternaFinestraEditoreSequenza
  1603. SHARED ScalaNote
  1604. SHARED TipoDiNota()
  1605. SHARED XInizioAreaVisibile
  1606. SHARED YInizioAreaVisibile
  1607.  Select TipoDiEvento$
  1608.  Case "Note"
  1609.   NotaVisualizzata.w=(127-Evento-YInizioAreaVisibile)*8
  1610.   If NotaVisualizzata>=0 AND NotaVisualizzata+7<=AltezzaInternaFinestraEditoreSequenza-8-8
  1611.    InizioNota.l=InizioEvento:FineNota.l=InizioNota+DurataEvento-1
  1612.    I.w=16+InizioNota/ScalaNote-XInizioAreaVisibile
  1613.    F.w=16+FineNota/ScalaNote-XInizioAreaVisibile
  1614.    If I>=16 AND I<LarghezzaInternaFinestraEditoreSequenza
  1615.     InizioNotaVisibile.b=True
  1616.    Else
  1617.     InizioNotaVisibile=False
  1618.    EndIf
  1619.    If F>=16 AND F<LarghezzaInternaFinestraEditoreSequenza
  1620.     FineNotaVisibile.b=True
  1621.    Else
  1622.     FineNotaVisibile=False
  1623.    EndIf
  1624.    If I<16 AND F>LarghezzaInternaFinestraEditoreSequenza
  1625.     NotaVisibile.b=True
  1626.    Else
  1627.     If InizioNotaVisibile=True OR FineNotaVisibile=True
  1628.      NotaVisibile=True
  1629.     Else
  1630.      NotaVisibile=False
  1631.     EndIf
  1632.    EndIf
  1633.    If NotaVisibile=True
  1634.     X0Nota=Min(Max(I,16),LarghezzaInternaFinestraEditoreSequenza-1)
  1635.     Y0Nota=Min(Max(NotaVisualizzata,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  1636.     X1Nota=Min(Max(F,16),LarghezzaInternaFinestraEditoreSequenza-1)
  1637.     Y1Nota=Min(Max(NotaVisualizzata+7,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  1638.     If TipoDiNota(Nota)\Diesis=True
  1639.      WBox X0Nota,Y0Nota,X1Nota,Y1Nota,0
  1640.     Else
  1641.      WBox X0Nota,Y0Nota,X1Nota,Y1Nota,3
  1642.     EndIf
  1643.    EndIf
  1644.   EndIf
  1645.  Case "Program"
  1646.   Programma.b=AreaVisibileDeiValori*(127-Evento)/128
  1647.   I.w=16+InizioEvento/ScalaNote-XInizioAreaVisibile
  1648.   If I>=16 AND I<LarghezzaInternaFinestraEditoreSequenza
  1649.    For Linea.b=0 To 7
  1650.     Y.w=Programma+Linea:LunghezzaEvento.w=Len("Program000")*8-1
  1651.     If EventoSelezionato=True Then LunghezzaEvento+Len("X")*8
  1652.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  1653.      Wline I,Y,I+LunghezzaEvento,Y,0
  1654.     Else
  1655.      Wline I,Y,I+LunghezzaEvento,Y,3
  1656.     EndIf
  1657.    Next Linea
  1658.   EndIf
  1659.  Case "Control"
  1660.   Controllo.b=AreaVisibileDeiValori*(127-Evento)/128
  1661.   I.w=16+InizioEvento/ScalaNote-XInizioAreaVisibile
  1662.   If I>=16 AND I<LarghezzaInternaFinestraEditoreSequenza
  1663.    For Linea.b=0 To 7
  1664.     Y.w=Controllo+Linea:LunghezzaEvento=Len("Control000")*8-1
  1665.     If EventoSelezionato=True Then LunghezzaEvento+Len("X")*8
  1666.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  1667.      Wline I,Y,I+LunghezzaEvento,Y,0
  1668.     Else
  1669.      Wline I,Y,I+LunghezzaEvento,Y,3
  1670.     EndIf
  1671.    Next Linea
  1672.   EndIf
  1673.  End Select
  1674. End Statement
  1675.  
  1676. ;--------------------------------------------
  1677. ;questa procedura disegna un evento musicale
  1678. ;this procedure draws a musical events
  1679. ;--------------------------------------
  1680. Statement DisegnaUnEventoMusicale{TipoDiEvento$,Evento.b,InizioEvento.l,DurataEvento.l,CanaleEvento.b,ModoDisegno.b}
  1681. SHARED AltezzaInternaFinestraEditoreSequenza
  1682. SHARED AreaInvisibileDelleNote
  1683. SHARED AreaVisibileDeiValori
  1684. SHARED LarghezzaInternaFinestraEditoreSequenza
  1685. SHARED ScalaNote
  1686. SHARED XInizioAreaVisibile
  1687. SHARED YInizioAreaVisibile
  1688.  Select TipoDiEvento$
  1689.  Case "Note"
  1690.   NotaVisualizzata.w=(127-Evento-YInizioAreaVisibile)*8
  1691.   If NotaVisualizzata>=0 AND NotaVisualizzata+7<=AltezzaInternaFinestraEditoreSequenza-8-8
  1692.    InizioNota.l=InizioEvento:FineNota.l=InizioNota+DurataEvento-1
  1693.    I.w=16+InizioNota/ScalaNote-XInizioAreaVisibile
  1694.    F.w=16+FineNota/ScalaNote-XInizioAreaVisibile
  1695.    If I>=16 AND I<LarghezzaInternaFinestraEditoreSequenza
  1696.     InizioNotaVisibile.b=True
  1697.    Else
  1698.     InizioNotaVisibile=False
  1699.    EndIf
  1700.    If F>=16 AND F<LarghezzaInternaFinestraEditoreSequenza
  1701.     FineNotaVisibile.b=True
  1702.    Else
  1703.     FineNotaVisibile=False
  1704.    EndIf
  1705.    If I<16 AND F>LarghezzaInternaFinestraEditoreSequenza
  1706.     NotaVisibile.b=True
  1707.    Else
  1708.     If InizioNotaVisibile=True OR FineNotaVisibile=True
  1709.      NotaVisibile=True
  1710.     Else
  1711.      NotaVisibile=False
  1712.     EndIf
  1713.    EndIf
  1714.    If NotaVisibile=True
  1715.     X0Nota=Min(Max(I,16),LarghezzaInternaFinestraEditoreSequenza-1)
  1716.     Y0Nota=Min(Max(NotaVisualizzata,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  1717.     X1Nota=Min(Max(F,16),LarghezzaInternaFinestraEditoreSequenza-1)
  1718.     Y1Nota=Min(Max(NotaVisualizzata+7,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  1719.     WBox X0Nota,Y0Nota,X1Nota,Y1Nota,16-CanaleEvento
  1720.     If ModoDisegno=#EventoSelezionato
  1721.      Wline X0Nota,NotaVisualizzata,X1Nota,NotaVisualizzata+7,CanaleEvento-1
  1722.      Wline X0Nota,NotaVisualizzata+7,X1Nota,NotaVisualizzata,CanaleEvento-1
  1723.     EndIf
  1724.     If ModoDisegno=#EventoNonSelezionato
  1725.      Wline X0Nota+1,NotaVisualizzata+1,X1Nota-1,NotaVisualizzata+1,CanaleEvento-1
  1726.      Wline X0Nota+1,NotaVisualizzata+6,X1Nota-1,NotaVisualizzata+6,CanaleEvento-1
  1727.     EndIf
  1728.    EndIf
  1729.    If ModoDisegno=#EventoNonSelezionato
  1730.     If InizioNotaVisibile=True
  1731.      Wline I+1,NotaVisualizzata+1,I+1,NotaVisualizzata+6,CanaleEvento-1
  1732.     EndIf
  1733.     If FineNotaVisibile=True
  1734.      Wline F-1,NotaVisualizzata+1,F-1,NotaVisualizzata+6,CanaleEvento-1
  1735.     EndIf
  1736.    EndIf
  1737.   EndIf
  1738.  Case "Program"
  1739.   I.w=16+InizioEvento/ScalaNote-XInizioAreaVisibile
  1740.   If I>=16 AND I<LarghezzaInternaFinestraEditoreSequenza
  1741.    WColour CanaleEvento-1,16-CanaleEvento
  1742.    Y.w=AreaVisibileDeiValori*(127-Evento)/128
  1743.    WLocate I,Y
  1744.    Format "000":Print "Program",Evento:Format ""
  1745.    If ModoDisegno=#EventoSelezionato Then Print "X"
  1746.   EndIf
  1747.  Case "Control"
  1748.   I.w=16+InizioEvento/ScalaNote-XInizioAreaVisibile
  1749.   If I>=16 AND I<LarghezzaInternaFinestraEditoreSequenza
  1750.    WColour CanaleEvento-1,16-CanaleEvento
  1751.    Y.w=AreaVisibileDeiValori*(127-Evento)/128
  1752.    WLocate I,Y
  1753.    Format "000":Print "Control",Evento:Format ""
  1754.    If ModoDisegno=#EventoSelezionato Then Print "X"
  1755.   EndIf
  1756.  End Select
  1757. End Statement
  1758.  
  1759. ;-----------------------------------------------------------
  1760. ;questa procedura disegna le note di sfondo con i loro nomi
  1761. ;this procedure draws the notes background with note names
  1762. ;----------------------------------------------------------
  1763. Statement MostraLeNoteDiSfondoConILoroNomi{}
  1764. SHARED AreaInvisibileDelleNote
  1765. SHARED LarghezzaInternaFinestraEditoreSequenza
  1766. SHARED TipoDiNota()
  1767. SHARED YInizioAreaVisibile
  1768.  For Tasto.b=0 To 127-AreaInvisibileDelleNote
  1769.   Nota.b=127-Tasto-YInizioAreaVisibile
  1770.   Y0Nota.w=Tasto*8:Y1Nota.w=Y0Nota+7
  1771.   If TipoDiNota(Nota)\Diesis=True
  1772.    WBox 16,Y0Nota,LarghezzaInternaFinestraEditoreSequenza,Y1Nota,0
  1773.    WColour 3,0
  1774.   Else
  1775.    WBox 16,Y0Nota,LarghezzaInternaFinestraEditoreSequenza,Y1Nota,3
  1776.    WColour 0,3
  1777.   EndIf
  1778.   WLocate 16,Y0Nota
  1779.   Print "Note ",Nota,">"
  1780.   Print TipoDiNota(Nota)\NomeInglese
  1781.   Print "-"
  1782.   Print TipoDiNota(Nota)\NomeItaliano
  1783.   Print TipoDiNota(Nota)\Ottava
  1784.  Next Tasto
  1785. End Statement
  1786.  
  1787. ;-----------------------------------------------
  1788. ;questa procedura mostra i numeri delle battute
  1789. ;this procedure shows the bar numbers
  1790. ;-------------------------------------
  1791. Statement MostraLeBattute{}
  1792. SHARED AreaInvisibileDelleNote
  1793. SHARED AreaInvisibileDelTempo
  1794. SHARED LarghezzaInternaFinestraEditoreSequenza
  1795. SHARED ScalaNote
  1796. SHARED TipoDiNota()
  1797. SHARED XInizioAreaVisibile
  1798. SHARED YInizioAreaVisibile
  1799.  Nota.b=127-YInizioAreaVisibile-(127-AreaInvisibileDelleNote)
  1800.  Nota$=Str$(Nota):OttavaNota$=Str$(TipoDiNota(Nota)\Ottava):NomeIngleseNota$=TipoDiNota(Nota)\NomeInglese
  1801.  NomeItalianoNota$=TipoDiNota(Nota)\NomeItaliano
  1802.  LarghezzaTesto.w=Len("Note "+Nota$+">"+NomeIngleseNota$+"-"+NomeItalianoNota$+OttavaNota$+" ")*8
  1803.  If TipoDiNota(Nota)\Diesis=True Then WColour 3,0 Else WColour 0,3
  1804.  BattutaVisibile.w=192*Max(ScalaNote,4)/4
  1805.  ScostamentoBattute.w=XInizioAreaVisibile MOD 192
  1806.  FineTempoVisibile.l=XInizioAreaVisibile+(LarghezzaInternaFinestraEditoreSequenza-16)*ScalaNote
  1807.  For TempoVisibile.l=XInizioAreaVisibile To FineTempoVisibile Step BattutaVisibile
  1808.   XTempo.w=(TempoVisibile-XInizioAreaVisibile-ScostamentoBattute)/ScalaNote
  1809.   If XTempo>LarghezzaTesto
  1810.    WLocate XTempo,(127-AreaInvisibileDelleNote)*8:ConvertiIlTempoInBattute{TempoVisibile-ScostamentoBattute,False}
  1811.   EndIf
  1812.  Next TempoVisibile
  1813. End Statement
  1814.  
  1815. ;-----------------------------------------------------
  1816. ;questa procedura mostra gli slider dell'editore note
  1817. ;this procedure shows the notes editor' sliders
  1818. ;-----------------------------------------------
  1819. Statement MostraSliderEditoreSequenza{}
  1820. SHARED AreaInvisibileDelleNote
  1821. SHARED AreaInvisibileDelTempo
  1822. SHARED DurataSequenza
  1823. SHARED LarghezzaInternaFinestraEditoreSequenza
  1824. SHARED ScalaNote
  1825. SHARED Sequenza()
  1826. SHARED SequenzaSelezionata
  1827. SHARED XInizioAreaVisibile
  1828. SHARED YInizioAreaVisibile
  1829.  MostraSlider{1,YInizioAreaVisibile,AreaInvisibileDelleNote,"VERTICAL",#ListaGadgetEditoreSequenza,#FinestraEditoreSequenza}
  1830.  AreaInvisibileDelTempo=DurataSequenza/ScalaNote-(LarghezzaInternaFinestraEditoreSequenza-16)
  1831.  AreaInvisibileDelTempo=Max(AreaInvisibileDelTempo,0)
  1832.  If AreaInvisibileDelTempo=0
  1833.   Disable #ListaGadgetEditoreSequenza,2
  1834.   XInizioAreaVisibile=0
  1835.  Else
  1836.   Enable #ListaGadgetEditoreSequenza,2
  1837.  EndIf
  1838.  Redraw #FinestraEditoreSequenza,2
  1839.  MostraSlider{2,XInizioAreaVisibile,AreaInvisibileDelTempo,"HORIZONTAL",#ListaGadgetEditoreSequenza,#FinestraEditoreSequenza}
  1840. End Statement
  1841.  
  1842. ;--------------------------------------------
  1843. ;questa procedura mostra gli eventi musicali
  1844. ;this procedure shows musical events
  1845. ;------------------------------------
  1846. Statement MostraGliEventiMusicali{}
  1847. SHARED FineNotaCorrente
  1848. SHARED EventoMusicale()
  1849. SHARED NotaCorrente
  1850. SHARED SequenzaSelezionata
  1851.  ResetList EventoMusicale()
  1852.  While NextItem(EventoMusicale())=True
  1853.   TipoDiEvento$=EventoMusicale()\Tipo
  1854.   If EventoMusicale()\Sequenza=SequenzaSelezionata
  1855.    InizioEvento.l=EventoMusicale()\Inizio
  1856.    CanaleEvento.b=EventoMusicale()\Canale
  1857.    If EventoMusicale()\Selezionato=True
  1858.     Select TipoDiEvento$
  1859.     Case "Note"
  1860.      Nota.b=EventoMusicale()\Evento:DurataNota.l=EventoMusicale()\Durata
  1861.      DisegnaUnEventoMusicale{"Note",Nota,InizioEvento,DurataNota,CanaleEvento,#EventoSelezionato}
  1862.     Case "Program"
  1863.      Programma.b=EventoMusicale()\Evento
  1864.      DisegnaUnEventoMusicale{"Program",Programma,InizioEvento,0,CanaleEvento,#EventoSelezionato}
  1865.     Case "Control"
  1866.      Controllo.b=EventoMusicale()\Evento
  1867.      DisegnaUnEventoMusicale{"Control",Controllo,InizioEvento,0,CanaleEvento,#EventoSelezionato}
  1868.     End Select
  1869.    Else
  1870.     Select TipoDiEvento$
  1871.     Case "Note"
  1872.      Nota=EventoMusicale()\Evento:DurataNota=EventoMusicale()\Durata
  1873.      DisegnaUnEventoMusicale{"Note",Nota,InizioEvento,DurataNota,CanaleEvento,#EventoNonSelezionato}
  1874.     Case "Program"
  1875.      Programma.b=EventoMusicale()\Evento
  1876.      DisegnaUnEventoMusicale{"Program",Programma,InizioEvento,0,CanaleEvento,#EventoNonSelezionato}
  1877.     Case "Control"
  1878.      Controllo.b=EventoMusicale()\Evento
  1879.      DisegnaUnEventoMusicale{"Control",Controllo,InizioEvento,0,CanaleEvento,#EventoNonSelezionato}
  1880.     End Select
  1881.    EndIf
  1882.   EndIf
  1883.  Wend
  1884. End Statement
  1885.  
  1886. ;---------------------------------------------------------------
  1887. ;questa procedura mostra la scala di visualizzazione delle note
  1888. ;this procedure shows the note scale of notes displaying
  1889. ;--------------------------------------------------------
  1890. Statement MostraLaScalaDelleNote{}
  1891. SHARED AltezzaInternaFinestraEditoreSequenza
  1892. SHARED ScalaNote
  1893. ; For Scatola.b=0 To 4
  1894. ;  Y0Scatola.w=AltezzaInternaFinestraEditoreSequenza-8-8
  1895. ;  WBox Scatola,Y0Scatola+Scatola,15-Scatola,Y0Scatola+7-Scatola,15-Scatola
  1896. ; Next Scatola
  1897.  Select ScalaNote
  1898.  Case 1
  1899.   Ingrandimento.b=1
  1900.  Case 2
  1901.   Ingrandimento=2
  1902.  Case 4
  1903.   Ingrandimento=3
  1904.  Case 8
  1905.   Ingrandimento=4
  1906.  Case 16
  1907.   Ingrandimento=5
  1908.  Case 32
  1909.   Ingrandimento=6
  1910.  End Select
  1911.  WLocate 0,AltezzaInternaFinestraEditoreSequenza-8-8
  1912.  WColour 2,1:Print "Z",Ingrandimento
  1913. End Statement
  1914.  
  1915. ;---------------------------------------------------
  1916. ;questa procedura permette di cambiare la nota base
  1917. ;this procedure permits to change the basic note
  1918. ;------------------------------------------------
  1919. Statement CambiaLaNotaDiBase{}
  1920. SHARED AltezzaFonte
  1921. SHARED LarghezzaNota
  1922. SHARED TastoCursoreDestra$
  1923. SHARED TastoCursoreSinistra$
  1924. SHARED TastoEsc$
  1925. SHARED XLunSlider
  1926. SHARED YLunSlider
  1927.  TipoFinestra.l=#FinestraMovibile+#GadgetNascondiFinestra+#GadgetChiudiFinestra+#DammiZeroZero+#FinestraAttivata
  1928.  YPosF.w=(AltezzaFonte+3)*2
  1929.  YLunF.w=AltezzaFonte+3+16+8+8+2
  1930.  Window #FinestraCambioNotaBase,4,YPosF,4+24*9+2,YLunF,TipoFinestra,"Basic note",-1,-1
  1931.  LarghezzaInternaFinestraCambioNotaBase.w=InnerWidth
  1932.  AltezzaInternaFinestraCambioNotaBase.w=InnerHeight
  1933.  CloseWindow #FinestraCambioNotaBase
  1934.  XLunSlider=LarghezzaInternaFinestraCambioNotaBase
  1935.  YLunSlider=8
  1936.  ImpostaSlider{1,0,AltezzaInternaFinestraCambioNotaBase-8,"HORIZONTAL",0,#ListaGadgetCambioNotaBase}
  1937.  Window #FinestraCambioNotaBase,4,YPosF,4+24*9+2,YLunF,TipoFinestra,"Basic note",-1,-1,#ListaGadgetCambioNotaBase
  1938.  WindowFont #FonteDiCaratteriTopaz8
  1939. ; Zona.b=NewZoneTable(#TabellaZoneCambioNotaBase,9)
  1940. ; If Zona=True Then UseZoneTable #TabellaZoneCambioNotaBase Else Statement Return
  1941. ; UseZoneTable #TabellaZoneEditoreSequenza
  1942.  For Zona.b=0 To 7
  1943.   WBlit Zona,24*Zona,0;:SetZone Zona,24*Zona,0,24*Zona+23,15
  1944.  Next
  1945.  WLocate 24*8+8,4:WColour 1,0:Print "3";:SetZone 8,24*8,0,24*8+23,15
  1946.  MostraSlider{1,(LarghezzaNota-6)/6,((192*6)-6)/6,"HORIZONTAL",#ListaGadgetCambioNotaBase,#FinestraCambioNotaBase}
  1947.  Repeat
  1948.   WLocate 0,AltezzaInternaFinestraCambioNotaBase-8-8
  1949.   If LarghezzaNota MOD 6=0 Then WColour 10,9 Else WColour 2,1
  1950.   Format "0000":Print LarghezzaNota:Format "":Print SPACE$(23)
  1951.   EventoFinestraCambioNotaBase.l=WaitEvent
  1952.   Select EventoFinestraCambioNotaBase
  1953.   Case #HaiPremutoUnTastoDelTopo
  1954.    XTopo.w=WMouseX:YTopo.w=WMouseY:TastoCliccatoDelTopo.b=MButtons
  1955.    Select TastoCliccatoDelTopo
  1956.    Case 1
  1957.     XZonaTopo.b=XTopo/24:YZonaTopo.b=YTopo>=0 AND YTopo<16
  1958.     If YZonaTopo=True
  1959.      Select XZonaTopo
  1960.      Case 0
  1961.       LarghezzaNota=192*4:NotaPuntata.w=0:Terzina.b=0
  1962.       Speak "You have choosen a whole note width."
  1963.      Case 1
  1964.       LarghezzaNota=192*2:NotaPuntata=0:Terzina=0
  1965.       Speak "You have choosen a half note width."
  1966.      Case 2
  1967.       LarghezzaNota=192:NotaPuntata=0:Terzina=0
  1968.       Speak "You have choosen a quarter note width."
  1969.      Case 3
  1970.       LarghezzaNota=192/2:NotaPuntata=0:Terzina=0
  1971.       Speak "You have choosen an eighth note width."
  1972.      Case 4
  1973.       LarghezzaNota=192/4:NotaPuntata=0:Terzina=0
  1974.       Speak "You have choosen a sixteenth note width."
  1975.      Case 5
  1976.       LarghezzaNota=192/8:NotaPuntata=0:Terzina=0
  1977.       Speak "You have choosen a thirty second note width."
  1978.      Case 6
  1979.       LarghezzaNota=192/16:NotaPuntata=0:Terzina=0
  1980.       Speak "You have choosen a sixty fourth note width."
  1981.      Case 7
  1982.       If NotaPuntata=0
  1983.        NotaPuntata=LarghezzaNota/2
  1984.        LarghezzaNota+NotaPuntata
  1985.        If Terzina>0
  1986.         Terzina=0
  1987.         Speak "You have no more a triplet note width, you have a dotted note width."
  1988.        Else
  1989.         Speak "You have a dotted note width."
  1990.        EndIf
  1991.       Else
  1992.        LarghezzaNota/3*2
  1993.        NotaPuntata=0
  1994.        Speak "You have no more a dotted note width."
  1995.       EndIf
  1996.      Case 8
  1997.       If Terzina=0
  1998.        Terzina=3:LarghezzaNota/Terzina
  1999.        If NotaPuntata>0
  2000.         NotaPuntata=0
  2001.         Speak "You have no more a dotted note width, you have a triplet note width."
  2002.        Else
  2003.         Speak "You have a triplet note width."
  2004.        EndIf
  2005.       Else
  2006.        LarghezzaNota*Terzina:Terzina=0
  2007.        Speak "You have no more a triplet note width."
  2008.       EndIf
  2009.      End Select
  2010.     EndIf
  2011.    Case 5
  2012.    End Select
  2013. ;  Case #HaiPremutoUnGadget
  2014. ;   XLunSlider=LarghezzaInternaFinestraCambioNotaBase
  2015. ;   LarghezzaNota=ValoreSlider{1,((192*6)-6)/6,XLunSlider,"HORIZONTAL",#ListaGadgetCambioNotaBase}*#_MClksPerSP+#_MClksPerSP
  2016.   Case #HaiRilasciatoUnGadget
  2017.    XLunSlider=LarghezzaInternaFinestraCambioNotaBase
  2018.    LarghezzaNota=ValoreSlider{1,((192*6)-6)/6,XLunSlider,"HORIZONTAL",#ListaGadgetCambioNotaBase}*#_MClksPerSP+#_MClksPerSP
  2019.    NotaPuntata=0:Terzina=0
  2020.   Case #HaiChiusoLaFinestra
  2021.    EsciDalCambioNotaBase=True
  2022.   Case #HaiPremutoUnTasto
  2023.    TastoPremuto$=LCase$(Inkey$)
  2024.    Select TastoPremuto$
  2025.    Case TastoEsc$
  2026.     EsciDalCambioNotaBase=True
  2027.    Case TastoCursoreDestra$
  2028.     If LarghezzaNota<192*6-1 Then LarghezzaNota+2:NotaPuntata=0:Terzina=0
  2029.    Case TastoCursoreSinistra$
  2030.     If LarghezzaNota>7 Then LarghezzaNota-2:NotaPuntata=0:Terzina=0
  2031.    End Select
  2032.   End Select
  2033.  Until EsciDalCambioNotaBase=True
  2034.  
  2035. ;*************************************************************
  2036. ;la seguente linea se attivata da' errore quando non dovrebbe
  2037. ;the following line if avtivated gives an error when it should not do
  2038. ;*********************************************************************
  2039. ; FreeZoneTable(#TabellaZoneCambioNotaBase)
  2040.  
  2041.  CloseWindow #FinestraCambioNotaBase
  2042.  Use Window #FinestraEditoreSequenza
  2043.  
  2044. ;***************************************************
  2045. ;il seguente comando sembra non avere alcun effetto
  2046. ;the following command seems have no effect
  2047. ;*******************************************
  2048. ; UseZoneTable #TabellaZoneEditoreSequenza
  2049.  
  2050. End Statement
  2051.  
  2052. ;---------------------------------------------------------------------------
  2053. ;questa procedura permette di spostare le nota selezionate cliccando con il
  2054. ; mouse su una di esse
  2055. ;this procedure permits to move the selected notes clicking on one of these
  2056. ;---------------------------------------------------------------------------
  2057. Statement MuoviGliEventiSelezionatiConIlTopo{XPosizioneEvento.l,YPosizioneEvento.b}
  2058. SHARED AreaInvisibileDelleNote
  2059. SHARED AreaVisibileDeiValori
  2060. SHARED EventoMusicale()
  2061. SHARED LarghezzaNota
  2062. SHARED ScalaNote
  2063. SHARED XInizioAreaVisibile
  2064. SHARED XPosizioneNota
  2065. SHARED YInizioAreaVisibile
  2066. SHARED YPosizioneNota
  2067.  TastoPremutoDelTopo.b=Joyb(0)
  2068.  If TastoPremutoDelTopo=#TastoSinistroDelTopoPremuto
  2069.   NuovaXTopo.w=WMouseX:NuovaYTopo.w=WMouseY
  2070.   TipoDiEvento$=EventoMusicale()\Tipo
  2071.   InizioEvento.l=EventoMusicale()\Inizio
  2072.   CanaleEvento.b=EventoMusicale()\Canale
  2073.   Select TipoDiEvento$
  2074.   Case "Note"
  2075.    XNuovaPosizioneNota.l=(XInizioAreaVisibile+(NuovaXTopo-16)*ScalaNote)/LarghezzaNota*LarghezzaNota
  2076.    YNuovaPosizioneNota.b=127-YInizioAreaVisibile-NuovaYTopo/8
  2077.    If XNuovaPosizioneNota<>XPosizioneEvento
  2078.     DeltaXEventoMusicale.l=XNuovaPosizioneNota-XPosizioneNota
  2079.     EventoMusicaleSpostatoConIlTopo=True
  2080.    Else
  2081.     DeltaXEventoMusicale=0
  2082.    EndIf
  2083.    If YNuovaPosizioneNota<>YPosizioneEvento
  2084.     DeltaYEventoMusicale.b=YNuovaPosizioneNota-YPosizioneNota
  2085.     EventoMusicaleSpostatoConIlTopo=True
  2086.    Else
  2087.     DeltaYEventoMusicale=0
  2088.    EndIf
  2089.    If DeltaXEventoMusicale=0 AND DeltaYEventoMusicale=0 Then EventoMusicaleSpostatoConIlTopo=False
  2090.    If EventoMusicaleSpostatoConIlTopo=True
  2091.     PushItem EventoMusicale()
  2092.     ResetList EventoMusicale()
  2093.     While NextItem(EventoMusicale())=True
  2094.      If EventoMusicale()\Selezionato=True
  2095.       If TipoDiEvento$="Note"
  2096.        Nota.b=EventoMusicale()\Evento
  2097.        If Nota+DeltaYEventoMusicale>=0 AND Nota+DeltaYEventoMusicale<=127 Then EventoMusicale()\Evento+DeltaYEventoMusicale
  2098.        InizioEvento.l=EventoMusicale()\Inizio
  2099.        If InizioEvento+DeltaXEventoMusicale>=0 Then EventoMusicale()\Inizio+DeltaXEventoMusicale
  2100.       EndIf
  2101.      EndIf
  2102.     Wend
  2103.     PopItem EventoMusicale()
  2104.    EndIf
  2105.   Case "Program"
  2106.    XNuovaPosizioneProgramma.l=(XInizioAreaVisibile+(NuovaXTopo-16)*ScalaNote)/LarghezzaNota*LarghezzaNota
  2107.    YNuovaPosizioneProgramma.b=127-NuovaYTopo*127/AreaVisibileDeiValori
  2108.    If XNuovaPosizioneProgramma<>XPosizioneEvento
  2109.     DeltaXEventoMusicale.l=XNuovaPosizioneProgramma-XPosizioneEvento
  2110.     EventoMusicaleSpostatoConIlTopo=True
  2111.    Else
  2112.     DeltaXEventoMusicale=0
  2113.    EndIf
  2114.    If YNuovaPosizioneProgramma<>YPosizioneEvento
  2115.     DeltaYEventoMusicale.b=YNuovaPosizione-YPosizioneEvento
  2116.     EventoMusicaleSpostatoConIlTopo=True
  2117.    Else
  2118.     DeltaYEventoMusicale=0
  2119.    EndIf
  2120.    If DeltaXEventoMusicale=0 AND DeltaYEventoMusicale=0 Then EventoMusicaleSpostatoConIlTopo=False
  2121.    If EventoMusicaleSpostatoConIlTopo=True
  2122.     PushItem EventoMusicale()
  2123.     ResetList EventoMusicale()
  2124.     While NextItem(EventoMusicale())=True
  2125.      If EventoMusicale()\Selezionato=True
  2126.       If TipoDiEvento$="Program"
  2127.        Programma.b=EventoMusicale()\Evento
  2128.        If Programma+DeltaYEventoMuiscale>=0 AND Programma+DeltaYEventoMusicale<AreaVisibileDeiValori
  2129.         EventoMusicale()\Evento+DeltaYEventoMusicale
  2130.        EndIf
  2131.        InizioEvento.l=EventoMusicale()\Inizio
  2132.        If InizioEvento+DeltaXEventoMusicale>=0 Then EventoMusicale()\Inizio+DeltaXEventoMusicale
  2133.       EndIf
  2134.      EndIf
  2135.     Wend
  2136.     PopItem EventoMusicale()
  2137.    EndIf
  2138.   Case "Control"
  2139.    XNuovaPosizioneControllo.l=(XInizioAreaVisibile+(NuovaXTopo-16)*ScalaNote)/LarghezzaNota*LarghezzaNota
  2140.    YNuovaPosizioneControllo.b=127-NuovaYTopo*127/AreaVisibileDeiValori
  2141.    If XNuovaPosizioneControllo<>XPosizioneEvento
  2142.     DeltaXEventoMusicale.l=XNuovaPosizioneControllo-XPosizioneEvento
  2143.     EventoMusicaleSpostatoConIlTopo=True
  2144.    Else
  2145.     DeltaXEventoMusicale=0
  2146.    EndIf
  2147.    If YNuovaPosizioneControllo<>YPosizioneEvento
  2148.     DeltaYEventoMusicale.b=YNuovaPosizioneControllo-YPosizioneEvento
  2149.     EventoMusicaleSpostatoConIlTopo=True
  2150.    Else
  2151.     DeltaYEventoMusicale=0
  2152.    EndIf
  2153.    If DeltaXEventoMusicale=0 AND DeltaYEventoMusicale=0 Then EventoMusicaleSpostatoConIlTopo=False
  2154.    If EventoMusicaleSpostatoConIlTopo=True
  2155.     PushItem EventoMusicale()
  2156.     ResetList EventoMusicale()
  2157.     While NextItem(EventoMusicale())=True
  2158.      If EventoMusicale()\Selezionato=True
  2159.       If TipoDiEvento$="Control"
  2160.        Conttrollo.b=EventoMusicale()\Evento
  2161.        If Controllo+DeltaYEventoMuiscale>=0 AND Controllo+DeltaYEventoMusicale<AreaVisibileDeiValori
  2162.         EventoMusicale()\Evento+DeltaYEventoMusicale
  2163.        EndIf
  2164.        InizioEvento.l=EventoMusicale()\Inizio
  2165.        If InizioEvento+DeltaXEventoMusicale>=0 Then EventoMusicale()\Inizio+DeltaXEventoMusicale
  2166.       EndIf
  2167.      EndIf
  2168.     Wend
  2169.     PopItem EventoMusicale()
  2170.    EndIf
  2171.   End Select
  2172.  EndIf
  2173. End Statement
  2174.  
  2175. ;----------------------------------------
  2176. ;questa procedura suona la nota corrente
  2177. ;this procedure plays the current note
  2178. ;--------------------------------------
  2179. Statement SuonaLaNota{Nota.b,VelocitaNota.b,CanaleNota.b,Modo.b}
  2180. SHARED AltezzaInternaFinestraEditoreSequenza
  2181. SHARED EventoMusicale()
  2182. SHARED MIDIAttivato
  2183. SHARED PeriFreq()
  2184. SHARED Suono()
  2185. SHARED VoceSpenta
  2186.  For Suono.b=0 To 31
  2187.   If Suono(Suono)\Canale=CanaleNota Pop For:Goto FineCicloFor
  2188.  Next Suono
  2189. FineCicloFor
  2190.  If Suono<32
  2191.   If Suono(Suono)\Canale>0
  2192.    Periodo.l=PeriFreq(Nota)\Periodo
  2193.    If Periodo>=#PeriodoMinimo AND Periodo<65536
  2194.     If VoceSpenta>0
  2195.      If VoceSpenta BitTst 0=True Then Voce.b=1:VoceSpenta BitClr 0:Goto SuonaCampione
  2196.      If VoceSpenta BitTst 1=True Then Voce=2:VoceSpenta BitClr 1:Goto SuonaCampione
  2197.      If VoceSpenta BitTst 2=True Then Voce=4:VoceSpenta BitClr 2:Goto SuonaCampione
  2198.      If VoceSpenta BitTst 3=True Then Voce=8:VoceSPenta BitClr 3
  2199.     EndIf
  2200. SuonaCampione
  2201.     SetPeriod Suono,Periodo:Sound Suono,Voce
  2202.     EventoMusicale()\VoceUsata=Voce
  2203.     Messaggio$="Note>"+Str$(Nota)+" frequency>"+Str$(PeriFreq(Nota)\Frequenza)
  2204.    EndIf
  2205.   EndIf
  2206.  Else
  2207.   If MIDIAttivato=True
  2208.    ByteDiStatoMIDI.b=#_NoteOn+(CanaleNota-1)
  2209.    WriteSerial 0,ByteDiStatoMIDI
  2210.    WriteSerial 0,Nota
  2211.    WriteSerial 0,VelocitaNota
  2212.    Messaggio$="Note>"+Str$(Nota)+" vel>"+Str$(VelocitaNota)
  2213.   EndIf
  2214.  EndIf
  2215.  If Modo=#EseguiGliEventiDallEditoreSequenza
  2216.   XMessaggio.w=16*16+8*3+8*4+8*6
  2217.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  2218.   Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  2219.   WLocate XMessaggio,YMessaggio
  2220.   WColour CanaleNota-1,16-CanaleNota
  2221.   Print Messaggio$
  2222.  EndIf
  2223. End Statement
  2224.  
  2225. ;-----------------------------------------------
  2226. ;questa procedura esegue il cambio di programma
  2227. ;this procedure execute the program change
  2228. ;------------------------------------------
  2229. Statement EseguiIlCambioDiProgramma{Programma,CanaleProgramma.b,Modo.b}
  2230. SHARED MIDIAttivato
  2231.  If MIDIAttivato=True
  2232.   ByteDiStatoMIDI.b=#_ProgramChange+(CanaleProgramma-1)
  2233.   WriteSerial 0,ByteDiStatoMIDI
  2234.   WriteSerial 0,Programma
  2235.  EndIf
  2236.  If Modo=#EseguiGliEventiDallEditoreSequenza
  2237.   XMessaggio.w=16*16+8*3+8*4+8*6
  2238.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  2239.   Messaggio$="Program>"+Str$(Programma)
  2240.   Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  2241.   WLocate XMessaggio,YMessaggio
  2242.   WColour CanaleProgramma-1,16-CanaleProgramma
  2243.   Print Messaggio$
  2244.  EndIf
  2245. End Statement
  2246.  
  2247. ;-----------------------------------------------
  2248. ;questa procedura esegue il cambio di controllo
  2249. ;this procedure execute the control change
  2250. ;------------------------------------------
  2251. Statement EseguiIlCambioDiControllo{Controllo,ValoreControllo,CanaleControllo.b,Modo.b}
  2252.  If MIDIAttivato=True
  2253.   ByteDiStatoMIDI.b=#_ControlChange+(CanaleControllo-1)
  2254.   WriteSerial 0,ByteDiStatoMIDI
  2255.   WriteSerial 0,Controllo
  2256.   WriteSerial 0,ValoreControllo
  2257.  EndIf
  2258.  If Modo=#EseguiGliEventiDallEditoreSequenza
  2259.   XMessaggio.w=16*16+8*3+8*4+8*6
  2260.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  2261.   Messaggio$="Control>"+Str$(Controllo)+" val>"+Str$(ValoreControllo)
  2262.   Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  2263.   WLocate XMessaggio,YMessaggio
  2264.   WColour CanaleControllo-1,16-CanaleControllo
  2265.   Print Messaggio$
  2266.  EndIf
  2267. End Statement
  2268.  
  2269. ;-----------------------------------------------------
  2270. ;questa procedura interrompe la nota suonata corrente
  2271. ;this procedure stops the current played note
  2272. ;---------------------------------------------
  2273. Statement SmettiDiSuonareLaNota{Nota.b,VelocitaNota.b,CanaleNota.b,Modo.b}
  2274. SHARED AltezzaInternaFinestraEditoreSequenza
  2275. SHARED EventoMusicale()
  2276. SHARED MIDIAttivato
  2277. SHARED VoceSpenta
  2278.  VoceUsata.b=EventoMusicale()\VoceUsata
  2279.  If VoceUsata>0
  2280.   Quiet VoceUsata
  2281.   VoceSpenta OR VoceUsata
  2282.  Else
  2283.   If MIDIAttivato=True
  2284.    ByteDiStatoMIDI=#_NoteOff+(CanaleNota-1)
  2285.    WriteSerial 0,ByteDiStatoMIDI
  2286.    WriteSerial 0,Nota
  2287.    WriteSerial 0,VelocitaNota
  2288.   EndIf
  2289.  EndIf
  2290. End Statement
  2291.  
  2292. ;----------------------------------
  2293. ;questa procedura modifica le note
  2294. ;this procedure modifies the notes
  2295. ;----------------------------------
  2296. Statement Selezione{Modo.b}
  2297. SHARED AltezzaInternaFinestraEditoreSequenza
  2298. SHARED AreaInvisibileDelleNote
  2299. SHARED AreaVisibileDeiValori
  2300. SHARED CanaleSelezionato
  2301. SHARED DurataSequenza
  2302. SHARED Eventi
  2303. SHARED EventiSelezionati
  2304. SHARED EventoMusicale()
  2305. SHARED LarghezzaInternaFinestraEditoreSequenza
  2306. SHARED LarghezzaNota
  2307. SHARED MIDIAttivato
  2308. SHARED NotaSuonata
  2309. SHARED PeriFreq()
  2310. SHARED ScalaNote
  2311. SHARED SequenzaSelezionata
  2312. SHARED Suono()
  2313. SHARED TipoDiEvento$
  2314. SHARED XInizioAreaVisibile
  2315. SHARED XPosizioneNota
  2316. SHARED XTopo
  2317. SHARED YInizioAreaVisibile
  2318. SHARED YPosizioneNota
  2319. SHARED YTopo
  2320.  ResetList EventoMusicale()
  2321.  StessoEvento.b=%0000
  2322.  XTopo=Min(Max(XTopo,16),LarghezzaInternaFinestraEditoreSequenza-1)
  2323.  YTopo=Min(Max(YTopo,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  2324.  While NextItem(EventoMusicale())=True
  2325.   StessoEvento=%0000
  2326.   TipoDiEventoSelezionato$=EventoMusicale()\Tipo
  2327.   InizioEvento.l=EventoMusicale()\Inizio
  2328.   CanaleEvento.b=EventoMusicale()\Canale
  2329.   SequenzaEvento.w=EventoMusicale()\Sequenza
  2330.   EventoSelezionato.b=EventoMusicale()\Selezionato
  2331.   If Modo=#SelezionaUnEvento
  2332.    Select TipoDiEventoSelezionato$
  2333.    Case "Note"
  2334.     Nota.b=EventoMusicale()\Evento
  2335.     DurataNota.l=EventoMusicale()\Durata
  2336.     FineNota.l=InizioEvento+DurataNota-1
  2337.     VelocitaNota.b=EventoMusicale()\Valore
  2338.     XPosizioneNota=(XInizioAreaVisibile+(XTopo-16)*ScalaNote)/LarghezzaNota*LarghezzaNota
  2339.     YPosizioneNota=127-YInizioAreaVisibile-YTopo/8
  2340.     If XPosizioneNota>=InizioEvento Then StessoEvento OR %0001
  2341.     If XPosizioneNota<=FineNota Then StessoEvento OR %0010
  2342.     If YPosizioneNota=Nota Then StessoEvento OR %0100
  2343.     If SequenzaEvento=SequenzaSelezionata Then StessoEvento OR %1000
  2344.     If StessoEvento=%1111
  2345.      If CanaleSelezionato<>CanaleEvento
  2346.       Format "00"
  2347.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2348.       WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2:Print Str$(CanaleSelezionato)
  2349.       CanaleSelezionato=CanaleEvento
  2350.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2351.       WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  2352.       Format ""
  2353.      EndIf
  2354.      If EventoSelezionato=True
  2355.       MuoviGliEventiSelezionatiConIlTopo{XPosizioneNota,YPosizioneNota}
  2356.       Nota=EventoMusicale()\Evento
  2357.       VelocitaNota=EventoMusicale()\Valore
  2358.       EventiSelezionati-1
  2359.       EventoMusicale()\Selezionato=False
  2360.      Else
  2361.       NotaPiuLunga.l=DurataNota
  2362.       EventiSelezionati+1
  2363.       EventoMusicale()\Selezionato=True
  2364.      EndIf
  2365.      SuonaLaNota{Nota,VelocitaNota,CanaleNota,#EseguiGliEventiDallEditoreSequenza}
  2366.      NotaSuonata\Inizio=InizioNota,CanaleNota
  2367.      NotaSuonata\Eseguito=True
  2368.      NotaSuonata\Evento=Nota,DurataNota,VelocitaNota
  2369.      Pop While:Goto FineCicloWhile
  2370.     EndIf
  2371.    Case "Program"
  2372.     Programma.b=EventoMusicale()\Evento
  2373.     LunghezzaEvento.w=Len("Program000")*8-1
  2374.     If EventoSelezionato=True Then LunghezzaEvento+Len("X")*8
  2375.     FineProgramma.w=InizioEvento+LunghezzaEvento
  2376.     XPosizioneProgramma.w=(XInizioAreaVisibile+(XTopo-16)*ScalaNote)/LarghezzaNota*LarghezzaNota
  2377.     YPosizioneProgramma.b=127-YTopo*127/AreaVisibileDeiValori
  2378.     If XPosizioneProgramma>=InizioEvento Then StessoEvento OR %0001
  2379.     If XPosizioneProgramma<FineProgramma Then StessoEvento OR %0010
  2380.     If YPosizioneProgramma=Programma Then StessoEvento OR %0100
  2381.     If SequenzaEvento=SequenzaSelezionata Then StessoEvento OR %1000
  2382.     If StessoEvento=%1111
  2383.      If CanaleSelezionato<>CanaleEvento
  2384.       Format "00"
  2385.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2386.       WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2:Print Str$(CanaleSelezionato)
  2387.       CanaleSelezionato=CanaleEvento
  2388.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2389.       WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  2390.       Format ""
  2391.      EndIf
  2392.      If EventoSelezionato=True
  2393.       MuoviGliEventiSelezionatiConIlTopo{XPosizioneProgramma,YPosizioneProgramma}
  2394.       EventiSelezionati-1
  2395.       EventoMusicale()\Selezionato=False
  2396.      Else
  2397.       EventiSelezionati+1
  2398.       EventoMusicale()\Selezionato=True
  2399.      EndIf
  2400.      Pop While:Goto FineCicloWhile
  2401.     EndIf
  2402.    Case "Control"
  2403.     Controllo.b=EventoMusicale()\Evento
  2404.     LunghezzaEvento.w=Len("Program000")*8-1
  2405.     If EventoSelezionato=True Then LunghezzaEvento+Len("X")*8
  2406.     FineControllo.w=InizioEvento+LunghezzaEvento
  2407.     XPosizioneControllo.w=(XInizioAreaVisibile+(XTopo-16)*ScalaNote)/LarghezzaNota*LarghezzaNota
  2408.     YPosizioneControllo.b=127-YTopo*127/AreaVisibileDeiValori
  2409.     If XPosizioneControllo>=InizioEvento Then StessoEvento OR %0001
  2410.     If XPosizioneControllo<FineControllo Then StessoEvento OR %0010
  2411.     If YPosizioneControllo=Controllo Then StessoEvento OR %0100
  2412.     If SequenzaEvento=SequenzaSelezionata Then StessoEvento OR %1000
  2413.     If StessoEvento=%1111
  2414.      If CanaleSelezionato<>CanaleEvento
  2415.       Format "00"
  2416.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2417.       WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2:Print Str$(CanaleSelezionato)
  2418.       CanaleSelezionato=CanaleEvento
  2419.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2420.       WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  2421.       Format ""
  2422.      EndIf
  2423.      If EventoSelezionato=True
  2424.       MuoviGliEventiSelezionatiConIlTopo{XPosizioneControllo,YPosizioneControllo}
  2425.       EventiSelezionati-1
  2426.       EventoMusicale()\Selezionato=False
  2427.      Else
  2428.       EventiSelezionati+1
  2429.       EventoMusicale()\Selezionato=True
  2430.      EndIf
  2431.      Pop While:Goto FineCicloWhile
  2432.     EndIf
  2433.    End Select
  2434.   Else
  2435.    If EventoSelezionato=True
  2436.     Select Modo
  2437.     Case #CambiaIlCanaleDegliEventiSelezionati
  2438.      EventoMusicale()\Canale=CanaleSelezionato
  2439.     Case #AlzaDiUnoGliEventiSelezionati
  2440.      If EventoMusicale()\Evento<127 Then EventoMusicale()\Evento+1
  2441.     Case #AbbassaDiUnoGliEventiSelezionati
  2442.      If EventoMusicale()\Evento>0 Then EventoMusicale()\Evento-1
  2443.     Case #SpostaAvantiNelTempoGliEventiSelezionati
  2444.      EventoMusicale()\Inizio+LarghezzaNota
  2445.      DurataSequenza=Max(EventoMusicale()\Inizio+EventoMusicale()\Durata-1,DurataSequenza)
  2446.     Case #SpostaIndietroNelTempoGliEventiSelezionati
  2447.      EventoMusicale()\Inizio-LarghezzaNota:If EventoMusicale()\Inizio<0 Then EventoMusicale()\Inizio=0
  2448.     Case #EliminaGliEventiSelezionati
  2449.      If Eventi>0
  2450.       Eventi-1:EventiSelezionati-1:KillItem EventoMusicale()
  2451.      EndIf
  2452.     Case #DeselezionaTuttiGliEventi
  2453.      EventiSelezionati-1
  2454.      EventoMusicale()\Selezionato=False
  2455.     Case #InvertiLaSelezioneDiTuttiGliEventi
  2456.      EventiSelezionati-1
  2457.      EventoMusicale()\Selezionato=False
  2458.     Case #AggiungiDieciAgliEventiSelezionati
  2459.      If EventoMusicale()\Evento+10<127 Then EventoMusicale()\Evento+10
  2460.     Case #SottraiDieciAgliEventiSelezionati
  2461.      If EventoMusicale()\Evento-10>=0 Then EventoMusicale()\Evento-10
  2462.     End Select
  2463.     If TipoDiEventoSelezionato$="Note"
  2464.      Select Modo
  2465.      Case #AllungaLaDurataDelleNoteSelezionate
  2466.       If DurataNota=6 Then EventoMusicale()\Durata=LarghezzaNota Else EventoMusicale()\Durata+LarghezzaNota
  2467.       NotaPiuLunga=Max(NotaPiuLunga,EventoMusicale()\Durata)
  2468.       DurataSequenza=Max(EventoMusicale()\Inizio+EventoMusicale()\Durata-1,DurataSequenza)
  2469.      Case #RiduciLaDurataDelleNoteSelezionate
  2470.       EventoMusicale()\Durata-LarghezzaNota:If EventoMusicale()\Durata<#_MClksPerSP Then EventoMusicale()\Durata=#_MClksPerSP
  2471.       NotaPiuLunga=Max(EventoMusicale()\Durata,NotaPiuLunga)
  2472.      Case #AlzaDiUnOttavaLeNoteSelezionate
  2473.       If EventoMusicale()\Evento+12<=127 Then EventoMusicale()\Evento+12
  2474.      Case #AbbassaDiUnOttavaLeNoteSelezionate
  2475.       If EventoMusicale()\Evento-12>=0 Then EventoMusicale()\Evento-12
  2476.      End Select
  2477.     EndIf
  2478.    Else
  2479.     Select Modo
  2480.     Case #SelezionaTuttiGliEventi
  2481.      EventiSelezionati+1
  2482.      EventoMusicale()\Selezionato=True
  2483.     Case #InvertiLaSelezioneDiTuttiGliEventi
  2484.      EventiSelezionati+1
  2485.      EventoMusicale()\Selezionato=True
  2486.     End Select
  2487.    EndIf
  2488.   EndIf
  2489.  Wend
  2490. FineCicloWhile
  2491.  If Modo=#SelezionaUnEvento AND StessoEvento<%1111
  2492.   If CanaleSelezionato>0
  2493.    LastItem EventoMusicale()
  2494.    If AddItem(EventoMusicale())=True
  2495.     Eventi+1
  2496.     EventoMusicale()\Inizio=(XInizioAreaVisibile+(XTopo-16)*ScalaNote)/LarghezzaNota*LarghezzaNota
  2497.     EventoMusicale()\Canale=CanaleSelezionato
  2498.     EventoMusicale()\Sequenza=SequenzaSelezionata
  2499.     EventoMusicale()\Selezionato=False
  2500.     EventoMusicale()\Tipo=TipoDiEvento$
  2501.     Select TipoDiEvento$
  2502.     Case "Note"
  2503.      EventoMusicale()\Evento=127-YInizioAreaVisibile-YTopo/8
  2504.      EventoMusicale()\Durata=LarghezzaNota
  2505.      EventoMusicale()\Valore=64
  2506.      NotaSuonata\Evento=EventoMusicale()\Evento,EventoMusicale()\Inizio,EventoMusicale()\Canale,EventoMusicale()\Sequenza
  2507.      NotaSuonata\Durata=EventoMusicale()\Durata,EventoMusicale()\Valore
  2508.      SuonaLaNota{NotaSuonata\Evento,NotaSuonata\Valore,NotaSuonata\Canale,#EseguiGliEventiDallEditoreSequenza}
  2509.      NotaSuonata\Eseguito=True
  2510.     Case "Program"
  2511.      EventoMusicale()\Evento=127-YTopo*127/AreaVisibileDeiValori
  2512.     Case "Control"
  2513.      EventoMusicale()\Evento=127-YTopo*127/AreaVisibileDeiValori
  2514.      EventoMusicale()\Valore=64
  2515.     End Select
  2516.     DurataSequenza=Max(EventoMusicale()\Inizio+EventoMusicale()\Durata,DurataSequenza)
  2517.    Else
  2518.     EZRequest "AmySequencer message","You have used all the available events","OK"
  2519.    EndIf
  2520.   Else
  2521.    EZRequest "AmySequencer message","You must select a channel first","OK"
  2522.   EndIf
  2523.  EndIf
  2524.  If Modo=#SelezionaGliEventiUguali
  2525.   ResetList EventoMusicale():If EventiSelezionati>0 Then EventiSelezionati-1
  2526.   Nota.b=127-YInizioAreaVisibile-YTopo/8
  2527.   While NextItem(EventoMusicale())=True
  2528.    If  EventoMusicale()\Canale=CanaleSelezionato AND EventoMusicale()\Sequenza=SequenzaSelezionata
  2529.     Select TipoDiEvento$
  2530.     Case "Note"
  2531.      If EventoMusicale()\Evento=Nota
  2532.       EventiSelezionati+1
  2533.       EventoMusicale()\Selezionato=True
  2534.      EndIf
  2535.     Case "Program"
  2536.      If EventoMusicale()\Evento=Programma
  2537.       EventiSelezionati+1
  2538.       EventoMusicale()\Selezionato=True
  2539.      EndIf
  2540.     Case "Control"
  2541.      If EventoMusicale()\Evento=Controllo
  2542.       EventiSelezionati+1
  2543.       EventoMusicale()\Selezionato=True
  2544.      EndIf
  2545.     End Select
  2546.    EndIf
  2547.   Wend
  2548.  EndIf
  2549.  If NotaPiuLunga>0
  2550.   XMessaggio.w=16*16+8*3+8*4+8*6
  2551.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  2552.   WLocate XMessaggio,YMessaggio
  2553.   WColour 1,0
  2554.   Print SPACE$(80-XMessaggio/8)
  2555.   WLocate XMessaggio,YMessaggio
  2556.   Print "Len>":ConvertiIlTempoInBattute{NotaPiuLunga,True}
  2557.  EndIf
  2558. End Statement
  2559.  
  2560. ;-----------------------------------------------
  2561. ;questa procedura si occupa eseguire gli eventi
  2562. ;this procedure executes the events
  2563. ;-----------------------------------
  2564. Statement EseguiGliEventi{Modo.b}
  2565. SHARED AltezzaInternaFinestraEditoreSequenza
  2566. SHARED DurataSequenza
  2567. SHARED EventoMusicale()
  2568. SHARED FineMotivo
  2569. SHARED Sequenza()
  2570. SHARED SequenzaSelezionata
  2571. SHARED TicPerCinquantesimoDiSecondo
  2572.  ResetTimer
  2573.  Tempo.l=Timer
  2574.  If Modo=#EseguiGliEventiDallaFinestraPrincipale Then FineEsecuzione.l=FineMotivo
  2575.  If Modo=#EseguiGliEventiDallEditoreSequenza Then FineEsecuzione=DurataSequenza
  2576.  Repeat
  2577.   Tempo=Timer*TicPerCinquantesimoDiSecondo
  2578.   EventoFinestraEsecutoreEventiMusicali.l=Event
  2579.   If EventoFinestraEsecutoreEventiMusicali=#HaiChiusoLaFinestra Then Pop Repeat:Statement Return
  2580.   ResetList EventoMusicale()
  2581.   While NextItem(EventoMusicale())
  2582.    SequenzaEvento.w=EventoMusicale()\Sequenza
  2583.    If SequenzaEvento=SequenzaSelezionata OR Modo=#EseguiGliEventiDallaFinestraPrincipale
  2584.     If Modo=#EseguiGliEventiDallaFinestraPrincipale
  2585.      InizioEvento.l=Sequenza(SequenzaEvento)\Inizio+EventoMusicale()\Inizio
  2586.     EndIf
  2587.     If Modo=#EseguiGliEventiDallEditoreSequenza
  2588.      InizioEvento.l=EventoMusicale()\Inizio
  2589.     EndIf
  2590.     EventoEseguito.b=EventoMusicale()\Eseguito
  2591.     If EventoEseguito=0 AND Tempo>=InizioEvento
  2592.      TipoDiEvento$=EventoMusicale()\Tipo
  2593.      CanaleEvento.b=EventoMusicale()\Canale
  2594.      EventoEseguito.b=EventoMusicale()\Eseguito
  2595.      If TipoDiEvento$="Note"
  2596.       Nota.b=EventoMusicale()\Evento
  2597.       DurataNota.l=EventoMusicale()\Durata
  2598.       FineEvento.l=InizioEvento+DurataNota-1
  2599.       VelocitaNota.b=EventoMusicale()\Valore
  2600.       SuonaLaNota{Nota,VelocitaNota,CanaleEvento,Modo}
  2601.       If Modo=#EseguiGliEventiDallEditoreSequenza
  2602.        DisegnaUnEventoMusicale{"Note",Nota,InizioEvento,DurataNota,CanaleEvento,#EventoEvidenziato}
  2603.       EndIf
  2604.      Else
  2605.       Select TipoDiEvento$
  2606.       Case "Program"
  2607.        Programma.b=EventoMusicale()\Evento
  2608.        EseguiIlCambioDiProgramma{Programma,CanaleEvento,Modo}
  2609.       Case "Control"
  2610.        Controllo.b=EventoMusicale()\Evento:ValoreEvento.b=EventoMusicale()\Valore
  2611.        EseguiIlCambioDiControllo{Controllo,ValoreEvento,CanaleEvento,Modo}
  2612.       End Select
  2613.       FineEvento=InizioEvento
  2614.      EndIf
  2615.      EventoMusicale()\Eseguito=1
  2616.     EndIf
  2617.     If EventoEseguito=1 AND Tempo>=FineEvento
  2618.      If Modo=#EseguiGliEventiDallEditoreSequenza
  2619.       EventoSelezionato.b=EventoMusicale()\Selezionato
  2620.       If TipoDiEvento$="Note"
  2621.        SmettiDiSuonareLaNota{Nota,VelocitaNota,CanaleEvento,Modo}
  2622.        If EventoSelezionato=True
  2623.         DisegnaUnEventoMusicale{"Note",Nota,InizioEvento,DurataNota,CanaleEvento,#EventoSelezionato}
  2624.        Else
  2625.         DisegnaUnEventoMusicale{"Note",Nota,InizioEvento,DurataNota,CanaleEvento,#EventoNonSelezionato}
  2626.        EndIf
  2627.       EndIf
  2628.      EndIf
  2629.      EventoMusicale()\Eseguito=2
  2630.     EndIf
  2631.    EndIf
  2632.   Wend
  2633.  Until Tempo>=FineEsecuzione
  2634.  ResetList EventoMusicale()
  2635.  While NextItem(EventoMusicale())
  2636.   EventoMusicale()\Eseguito=0
  2637.  Wend
  2638.  Quiet %1111
  2639. End Statement
  2640.  
  2641. Statement EditoreSequenza{}
  2642. SHARED AltezzaFonte
  2643. SHARED AltezzaInternaFinestraEditoreSequenza
  2644. SHARED AltezzaSchermo
  2645. SHARED AreaInvisibileDelleNote
  2646. SHARED AreaInvisibileDelTempo
  2647. SHARED AreaVisibileDeiValori
  2648. SHARED CanaleSelezionato
  2649. SHARED DurataSequenza
  2650. SHARED Eventi
  2651. SHARED EventiSelezionati
  2652. SHARED EventoMusicale()
  2653. SHARED FineMotivo
  2654. SHARED LarghezzaInternaFinestraEditoreSequenza
  2655. SHARED LarghezzaNota
  2656. SHARED LarghezzaSchermo
  2657. SHARED MIDIAttivato
  2658. SHARED NotaSuonata
  2659. SHARED PeriFreq()
  2660. SHARED ScalaNote
  2661. SHARED Sequenza()
  2662. SHARED SequenzaSelezionata
  2663. SHARED TastoBackspace$
  2664. SHARED TastoCursoreDestra$
  2665. SHARED TastoCursoreGiu$
  2666. SHARED TastoCursoreSinistra$
  2667. SHARED TastoCursoreSu$
  2668. SHARED TastoEsc$
  2669. SHARED TicPerCinquantesimoDiSecondo
  2670. SHARED TipoDiEvento$
  2671. SHARED TipoDiNota()
  2672. SHARED XInizioAreaVisibile
  2673. SHARED XLunSlider
  2674. SHARED XTopo
  2675. SHARED YInizioAreaVisibile
  2676. SHARED YLunSlider
  2677. SHARED YTopo
  2678.  
  2679. ;-----------------------------------------------------------------------
  2680. ;imposta il colore del testo nei menu' a quello piu' chiaro disponibile
  2681. ;sets text menu colour to the brightest available
  2682. ;-------------------------------------------------
  2683.  MenuColour 3
  2684.  
  2685.  MenuTitle #ListaMenuEditoreSequenza,0,"Controls"
  2686.  MenuItem #ListaMenuEditoreSequenza,0,0,0,"Play"
  2687.  
  2688.  MenuTitle #ListaMenuEditoreSequenza,1,"Event type"
  2689.  MenuItem #ListaMenuEditoreSequenza,4,1,0," Note"
  2690.  MenuItem #ListaMenuEditoreSequenza,2,1,1," Program"
  2691.  MenuItem #ListaMenuEditoreSequenza,2,1,2," Control"
  2692.  
  2693.  MenuTitle #ListaMenuEditoreSequenza,2,"Settings"
  2694.  MenuItem #ListaMenuEditoreSequenza,0,2,0,"Basic width"
  2695.  
  2696.  XPosF.w=0:YPosF.w=AltezzaFonte+3:XLunF.w=LarghezzaSchermo:YLunF.w=AltezzaSchermo-(AltezzaFonte+3)
  2697.  TipoFinestra.l=#GadgetNascondiFinestra+#GadgetChiudiFinestra+#DammiZeroZero+#FinestraAttivata
  2698.  Eventi=Sequenza(SequenzaSelezionata-1)\Eventi
  2699.  EventiSelezionati=Sequenza(SequenzaSelezionata-1)\EventiSelezionati
  2700.  TitoloFinestra$="Sequence "+Str$(SequenzaSelezionata)+"-"
  2701.  If Eventi>0
  2702.   TitoloFinestra$+Str$(EventiSelezionati)+"selected event"
  2703.   If EventiSelezionati<>1 Then TitoloFinestra$+"s"
  2704.   TitoloFinestra$+" of "+Str$(Eventi)+" event"
  2705.   If Eventi<>1 Then TitoloFinestra$+"s"
  2706.  Else
  2707.   TitoloFinestra$+"no events into this sequence"
  2708.  EndIf
  2709.  Window #FinestraEditoreSequenza,XPosF,YPosF,XLunF,YLunF,TipoFinestra,TitoloFinestra$,-1,-1
  2710.  LarghezzaInternaFinestraEditoreSequenza=InnerWidth
  2711.  AltezzaInternaFinestraEditoreSequenza=InnerHeight
  2712.  CloseWindow #FinestraEditoreSequenza
  2713.  
  2714.  AreaInvisibileDelleNote.b=128-(AltezzaInternaFinestraEditoreSequenza-8-8)/8
  2715.  
  2716.  AreaVisibileDeiValori.w=(128-AreaInvisibileDelleNote)*8-7
  2717.  
  2718.  XLunSlider=16
  2719.  YLunSlider=AltezzaInternaFinestraEditoreSequenza-8-8
  2720.  ImpostaSlider{1,0,0,"VERTICAL",0,#ListaGadgetEditoreSequenza}
  2721.  
  2722.  XLunSlider=LarghezzaInternaFinestraEditoreSequenza-16
  2723.  YLunSlider=8
  2724.  ImpostaSlider{2,16,AltezzaInternaFinestraEditoreSequenza-8-8,"HORIZONTAL",0,#ListaGadgetEditoreSequenza}
  2725.  
  2726.  Window #FinestraEditoreSequenza,XPosF,YPosF,XLunF,YLunF,TipoFinestra,TitoloFinestra$,-1,-1,#ListaGadgetEditoreSequenza
  2727.  
  2728. ;-------------------------------
  2729. ;attacca il menu' alla finestra
  2730. ;attaches menu to window
  2731. ;------------------------
  2732.  SetMenu #ListaMenuEditoreSequenza
  2733.  
  2734. ;----------------------------------------------
  2735. ;imposta la fonte di caratteri per la finestra
  2736. ;sets the font for the window
  2737. ;-----------------------------
  2738.  WindowFont #FonteDiCaratteriTopaz8
  2739.  
  2740.  WJam #DueColoriConSfondoPieno
  2741.  
  2742.  SetZone 0,0,0,LarghezzaInternaFinestraEditoreSequenza-1,AltezzaInternaFinestraEditoreSequenza-1-8-8
  2743.  Format "00"
  2744.  For Canale.b=1 To 16
  2745.   X0Canale=(Canale-1)*16:Y0Canale=AltezzaInternaFinestraEditoreSequenza-8
  2746.   WLocate X0Canale,Y0Canale
  2747.   If Canale=CanaleSelezionato Then WColour Canale-1,16-Canale Else WColour 10+(Canale MOD 2)*2,9+(Canale MOD 2)*2
  2748.   Print Canale
  2749.   SetZone Canale,X0Canale,Y0Canale,X0Canale+15,Y0Canale+7
  2750.  Next Canale
  2751.  Format ""
  2752.  WLocate X0Canale+16,Y0Canale:WColour 14,13:Print "All"
  2753.  SetZone 17,X0Canale+16,Y0Canale,X0Canale+16+23,Y0Canale+7
  2754.  WLocate X0Canale+16+8*3,Y0Canale:WColour 15,14:Print "None"
  2755.  SetZone 18,X0Canale+16+8*3,Y0Canale,X0Canale+16+8*3+8*4-1,Y0Canale+7
  2756.  WLocate X0Canale+16+8*3+8*4,Y0Canale:WColour 14,13:Print "Toggle"
  2757.  SetZone 19,X0Canale+16+8*3+8*4,Y0Canale,X0Canale+16+8*3+8*4+8*6-1,Y0Canale+7
  2758.  MostraLaScalaDelleNote{}
  2759.  SetZone 20,0,AltezzaInternaFinestraEditoreSequenza-8-8,15,AltezzaInternaFinestraEditoreSequenza-8-8+7
  2760.  InizioSequenza.l=Sequenza(SequenzaSelezionata-1)\Inizio
  2761.  DurataSequenza=Max(Sequenza(SequenzaSelezionata-1)\Durata,192*4)
  2762.  ResetTimer
  2763.  Tempo.l=Timer
  2764.  Repeat
  2765.   If SecondoClicDelTopo.b=False
  2766.    TitoloFinestra$="Sequence "+Str$(SequenzaSelezionata)+"-"
  2767.    If Eventi>0
  2768.     TitoloFinestra$+Str$(EventiSelezionati)+" selected event"
  2769.     If EventiSelezionati<>1 Then TitoloFinestra$+"s"
  2770.     TitoloFinestra$+" of "+Str$(Eventi)+" event"
  2771.     If Eventi<>1 Then TitoloFinestra$+"s"
  2772.    Else
  2773.     TitoloFinestra$+"no events into this sequence"
  2774.    EndIf
  2775.    WTitle TitoloFinestra$
  2776.    MostraLeNoteDiSfondoConILoroNomi{}
  2777.    MostraLeBattute{}
  2778.    MostraGliEventiMusicali{}
  2779.    MostraSliderEditoreSequenza{}
  2780.    SecondoClicDelTopo=True
  2781.    TempoClic.b=0
  2782.   EndIf
  2783.   If NotaSuonata\Eseguito=True
  2784.    Nota.b=NotaSuonata\Evento:InizioNota.l=NotaSuonata\Inizio
  2785.    FineNota.l=InizioNota+NotaSuonata\Durata-1
  2786.    VelocitaNota.b=NotaSuonata\Valore
  2787.    CanaleNota.b=NotaSuonata\Canale
  2788.    If Tempo>FineNota
  2789.     SmettiDiSuonareLaNota{Nota,VelocitaNota,CanaleNota,#EseguiGliEventiDallEditoreSequenza}
  2790.     NotaSuonata\Eseguito=False
  2791.    EndIf
  2792.   EndIf
  2793.   EventoFinestraEditoreSequenza.l=Event
  2794.   Select EventoFinestraEditoreSequenza
  2795.   Case #HaiPremutoUnTastoDelTopo
  2796.    TastoCliccatoDelTopo=MButtons:TastoPremutoDelTopo=Joyb(0)
  2797.    XTopo=WMouseX:YTopo=WMouseY:ZonaTopo.b=Zone(XTopo,YTopo)
  2798.    Select TastoCliccatoDelTopo
  2799.    Case 1
  2800.     Select ZonaTopo
  2801.     Case 0
  2802.      Selezione{#SelezionaUnEvento}
  2803.     Case 1
  2804.      Format "00"
  2805.      If CanaleSelezionato>0
  2806.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2807.       WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2:Print Str$(CanaleSelezionato)
  2808.      EndIf
  2809.      CanaleSelezionato=1:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  2810.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2811.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  2812.      Format ""
  2813.     Case 2
  2814.      Format "00"
  2815.      If CanaleSelezionato>0
  2816.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2817.       WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2:Print Str$(CanaleSelezionato)
  2818.      EndIf
  2819.      CanaleSelezionato=2:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  2820.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2821.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  2822.      Format ""
  2823.     Case 3
  2824.      Format "00"
  2825.      If CanaleSelezionato>0
  2826.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2827.       WColour 10+(CanaleSelezionato MOD 2)*2,9+CanaleSelezionato MOD 2*2:Print Str$(CanaleSelezionato)
  2828.      EndIf
  2829.      CanaleSelezionato=3:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  2830.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2831.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  2832.      Format ""
  2833.     Case 4
  2834.      Format "00"
  2835.      If CanaleSelezionato>0
  2836.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2837.       WColour 10+(CanaleSelezionato MOD 2)*2,9+CanaleSelezionato MOD 2*2:Print Str$(CanaleSelezionato)
  2838.      EndIf
  2839.      CanaleSelezionato=4:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  2840.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2841.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  2842.      Format ""
  2843.     Case 5
  2844.      Format "00"
  2845.      If CanaleSelezionato>0
  2846.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2847.       WColour 10+(CanaleSelezionato MOD 2)*2,9+CanaleSelezionato MOD 2*2:Print Str$(CanaleSelezionato)
  2848.      EndIf
  2849.      CanaleSelezionato=5:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  2850.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2851.      WColour CanaleSeleZionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  2852.      Format ""
  2853.     Case 6
  2854.      Format "00"
  2855.      If CanaleSelezionato>0
  2856.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2857.       WColour 10+(CanaleSelezionato MOD 2)*2,9+CanaleSelezionato MOD 2*2:Print Str$(CanaleSelezionato)
  2858.      EndIf
  2859.      CanaleSelezionato=6:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  2860.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2861.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  2862.      Format ""
  2863.     Case 7
  2864.      Format "00"
  2865.      If CanaleSelezionato>0
  2866.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2867.       WColour 10+(CanaleSelezionato MOD 2)*2,9+CanaleSelezionato MOD 2*2:Print Str$(CanaleSelezionato)
  2868.      EndIf
  2869.      CanaleSelezionato=7:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  2870.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2871.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  2872.      Format ""
  2873.     Case 8
  2874.      Format "00"
  2875.      If CanaleSelezionato>0
  2876.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2877.       WColour 10+(CanaleSelezionato MOD 2)*2,9+CanaleSelezionato MOD 2*2:Print Str$(CanaleSelezionato)
  2878.      EndIf
  2879.      CanaleSelezionato=8:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  2880.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2881.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  2882.      Format ""
  2883.     Case 9
  2884.      Format "00"
  2885.      If CanaleSelezionato>0
  2886.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2887.       WColour 10+(CanaleSelezionato MOD 2)*2,9+CanaleSelezionato MOD 2*2:Print Str$(CanaleSelezionato)
  2888.      EndIf
  2889.      CanaleSelezionato=9:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  2890.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2891.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  2892.      Format ""
  2893.     Case 10
  2894.      Format "00"
  2895.      If CanaleSelezionato>0
  2896.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2897.       WColour 10+(CanaleSelezionato MOD 2)*2,9+CanaleSelezionato MOD 2*2:Print Str$(CanaleSelezionato)
  2898.      EndIf
  2899.      CanaleSelezionato=10:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  2900.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2901.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  2902.      Format ""
  2903.     Case 11
  2904.      Format "00"
  2905.      If CanaleSelezionato>0
  2906.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2907.       WColour 10+(CanaleSelezionato MOD 2)*2,9+CanaleSelezionato MOD 2*2:Print Str$(CanaleSelezionato)
  2908.      EndIf
  2909.      CanaleSelezionato=11:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  2910.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2911.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  2912.      Format ""
  2913.     Case 12
  2914.      Format "00"
  2915.      If CanaleSelezionato>0
  2916.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2917.       WColour 10+(CanaleSelezionato MOD 2)*2,9+CanaleSelezionato MOD 2*2:Print Str$(CanaleSelezionato)
  2918.      EndIf
  2919.      CanaleSelezionato=12:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  2920.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2921.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  2922.      Format ""
  2923.     Case 13
  2924.      Format "00"
  2925.      If CanaleSelezionato>0
  2926.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2927.       WColour 10+(CanaleSelezionato MOD 2)*2,9+CanaleSelezionato MOD 2*2:Print Str$(CanaleSelezionato)
  2928.      EndIf
  2929.      CanaleSelezionato=13:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  2930.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2931.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  2932.      Format ""
  2933.     Case 14
  2934.      Format "00"
  2935.      If CanaleSelezionato>0
  2936.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2937.       WColour 10+(CanaleSelezionato MOD 2)*2,9+CanaleSelezionato MOD 2*2:Print Str$(CanaleSelezionato)
  2938.      EndIf
  2939.      CanaleSelezionato=14:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  2940.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2941.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  2942.      Format ""
  2943.     Case 15
  2944.      Format "00"
  2945.      If CanaleSelezionato>0
  2946.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2947.       WColour 10+(CanaleSelezionato MOD 2)*2,9+CanaleSelezionato MOD 2*2:Print Str$(CanaleSelezionato)
  2948.      EndIf
  2949.      CanaleSelezionato=15:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  2950.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2951.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  2952.      Format ""
  2953.     Case 16
  2954.      Format "00"
  2955.      If CanaleSelezionato>0
  2956.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2957.       WColour 10+(CanaleSelezionato MOD 2)*2,9+CanaleSelezionato MOD 2*2:Print Str$(CanaleSelezionato)
  2958.      EndIf
  2959.      CanaleSelezionato=16:Selezione{#CambiaIlCanaleDegliEventiSelezionati}
  2960.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  2961.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  2962.      Format ""
  2963.     Case 17
  2964.      Selezione{#SelezionaTuttiGliEventi}
  2965.      NoteSelezionate=Note
  2966.     Case 18
  2967.      Selezione{#DeselezionaTuttiGliEventi}
  2968.      NoteSelezionate=0
  2969.     Case 19
  2970.      Selezione{#InvertiLaSelezioneDiTuttiGliEventi}
  2971.     Case 20
  2972.      ScalaNote+ScalaNote
  2973.      If ScalaNote=64 Then ScalaNote=1
  2974.      AreaInvisibileDelTempo=(DurataSequenza-LarghezzaInternaFinestraEditoreSequenza-16)/ScalaNote
  2975.      MostraLaScalaDelleNote{}
  2976.      MostraSliderEditoreSequenza{}
  2977.     End Select
  2978.     SecondoClicDelTopo=False
  2979.     TempoClic=0
  2980.    Case 5
  2981.     If TempoClic>35 AND ZonaTopo=0
  2982.      Selezione{#SelezionaGliEventiUguali}
  2983.      SecondoClicDelTopo=False
  2984.     Else
  2985.      SecondoClicDelTopo=True
  2986.      TempoClic=0
  2987.     EndIf
  2988.    End Select
  2989. ;   Case #HaiPremutoUnGadget
  2990. ;    Select GadgetHit
  2991. ;    Case 1
  2992. ;     LunghezzaSlider=AltezzaInternaFinestraEditoreSequenza-8-8
  2993. ;     YInizioAreaVisibile=ValoreSlider{1,AreaInvisibileDelleNote,LunghezzaSlider,"VERTICAL",#ListaGadgetEditoreSequenza}
  2994. ;    Case 2
  2995. ;     LunghezzaSlider=LarghezzaInternaFinestraEditoreSequenza-16
  2996. ;     XInizioAreaVisibile=ValoreSlider{2,AreaInvisibileDelTempo,LunghezzaSlider,"HORIZONTAL",#ListaGadgetEditoreSequenza}
  2997. ;    End Select
  2998.   Case #HaiRilasciatoUnGadget
  2999.    Select GadgetHit
  3000.    Case 1
  3001.     LunghezzaSlider=AltezzaInternaFinestraEditoreSequenza-8-8
  3002.     YInizioAreaVisibile=ValoreSlider{1,AreaInvisibileDelleNote,LunghezzaSlider,"VERTICAL",#ListaGadgetEditoreSequenza}
  3003.    Case 2
  3004.     LunghezzaSlider=LarghezzaInternaFinestraEditoreSequenza-16
  3005.     XInizioAreaVisibile=ValoreSlider{2,AreaInvisibileDelTempo,LunghezzaSlider,"HORIZONTAL",#ListaGadgetEditoreSequenza}
  3006.    End Select
  3007.    SecondoClicDelTopo=False
  3008.   Case #HaiAttivatoIlMenu
  3009.    If MenuHit=0 AND ItemHit=0 Then EseguiGliEventi{#EseguiGliEventiDallEditoreSequenza}
  3010.    If MenuHit=1 AND ItemHit=0 Then TipoDiEvento$="Note"
  3011.    If MenuHit=1 AND ItemHit=1 Then TipoDiEvento$="Program"
  3012.    If MenuHit=1 AND ItemHit=2 Then TipoDiEvento$="Control"
  3013.    If MenuHit=2 AND ItemHit=0 Then CambiaLaNotaDiBase{}
  3014.    SecondoClicDelTopo=False
  3015.   Case #HaiChiusoLaFinestra
  3016.    EsciDallEditoreSequenza.b=True
  3017.   Case #HaiPremutoUnTasto
  3018.    TastoPremuto$=LCase$(Inkey$)
  3019.    If TastoPremuto$=TastoEsc$ Then EsciDallEditoreSequenza=True
  3020.    If EventiSelezionati>0
  3021.     TastiShiftPremuti.b=(Qualifier-$8000) AND %11
  3022.     If TastiShiftPremuti>0
  3023.      Select TastoPremuto$
  3024.      Case TastoBackspace$
  3025.       Selezione{#EliminaGliEventiSelezionati}
  3026.      Case TastoCursoreSu$
  3027.       If TipoDiEvento$="Note" Then Selezione{#AlzaDiUnOttavaLeNoteSelezionate}
  3028.       If TipoDiEvento$="Program" Then Selezione{#AggiungiDieciAgliEventiSelezionati}
  3029.       If TipoDiEvento$="Control" Then Selezione{#AggiungiDieciAgliEventiSelezionati}
  3030.      Case TastoCursoreGiu$
  3031.       If TipoDiEvento$="Note" Then Selezione{#AbbassaDiUnOttavaLeNoteSelezionate}
  3032.       If TipoDiEvento$="Program" Then Selezione{#SottraiDieciAgliEventiSelezionati}
  3033.       If TipoDiEvento$="Control" Then Selezione{#SottraiDieciAgliEventiSelezionati}
  3034.      Case TastoCursoreDestra$
  3035.       If TipoDiEvento$="Note" Then Selezione{#AllungaLaDurataDelleNoteSelezionate}
  3036.      Case TastoCursoreSinistra$
  3037.       If TipoDiEvento$="Note" Then Selezione{#RiduciLaDurataDelleNoteSelezionate}
  3038.      End Select
  3039.     Else
  3040.      Select TastoPremuto$
  3041.      Case TastoBackspace$
  3042.       If LastItem(EventoMusicale())=True
  3043.        If EventoMusicale()\Selezionato=True Then EventiSelezionati-1
  3044.        KillItem EventoMusicale():Eventi-1
  3045.       EndIf
  3046.      Case TastoCursoreSu$
  3047.       Selezione{#AlzaDiUnoGliEventiSelezionati}
  3048.      Case TastoCursoreGiu$
  3049.       Selezione{#AbbassaDiUnoGliEventiSelezionati}
  3050.      Case TastoCursoreDestra$
  3051.       Selezione{#SpostaAvantiNelTempoGliEventiSelezionati}
  3052.      Case TastoCursoreSinistra$
  3053.       Selezione{#SpostaIndietroNelTempoGliEventiSelezionati}
  3054.      End Select
  3055.     EndIf
  3056.    Else
  3057.     Select TastoPremuto$
  3058.     Case TastoBackspace$
  3059.      If LastItem(EventoMusicale())=True
  3060.       If EventoMusicale()\Selezionato=True Then EventiSelezionati-1
  3061.       KillItem EventoMusicale():Eventi-1
  3062.      EndIf
  3063.     Case TastoCursoreSu$
  3064.      If YInizioAreaVisibile>0 Then YInizioAreaVisibile-1
  3065.     Case TastoCursoreGiu$
  3066.      If YInizioAreaVisibile<AreaInvisibileDelleNote Then YInizioAreaVisibile+1
  3067.     Case TastoCursoreDestra$
  3068.      XInizioAreaVisibile+LarghezzaNota
  3069.      XInizioAreaVisibile=Min(XInizioAreaVisibile,AreaInvisibileDelTempo)
  3070.     Case TastoCursoreSinistra$
  3071.      XInizioAreaVisibile-LarghezzaNota
  3072.      XInizioAreaVisibile=Max(XInizioAreaVisibile,0)
  3073.     End Select
  3074.    EndIf
  3075.    SecondoClicDelTopo=False
  3076.   End Select
  3077.   Tempo=Timer*TicPerCinquantesimoDiSecondo
  3078.   TempoClic+1
  3079.  Until EsciDallEditoreSequenza=True
  3080.  Sequenza(SequenzaSelezionata-1)\Eventi=Eventi
  3081.  Sequenza(SequenzaSelezionata-1)\EventiSelezionati=EventiSelezionati
  3082.  Sequenza(SequenzaSelezionata-1)\Inizio=InizioSequenza
  3083.  Sequenza(SequenzaSelezionata-1)\Durata=DurataSequenza
  3084.  FineMotivo=Max(InizioSequenza+DurataSequenza,FineMotivo)
  3085.  CloseWindow #FinestraEditoreSequenza
  3086.  Use Window #FinestraPrincipale
  3087.  WJam #UnColoreConSfondoTrasparente
  3088. End Statement
  3089.  
  3090. ;--------------------------------------------------------------
  3091. ;questa procedura mostra le sequenze nella finestra principale
  3092. ;this procedure show the sequences in the main window
  3093. ;-----------------------------------------------------
  3094. Statement MostraLeSequenze{}
  3095. SHARED PrimaSequenzaDaVisualizzare
  3096. SHARED Sequenza()
  3097. SHARED SequenzaSelezionata
  3098. SHARED SequenzeVisibili
  3099.  For Sequenza.b=1 To SequenzeVisibili
  3100.   WLocate 16,Sequenza*8:WColour 0,0:Print SPACE$(78):WLocate 16,Sequenza*8
  3101.   NomeSequenza$=Sequenza(PrimaSequenzaDaVisualizzare+Sequenza-1)\Nome
  3102.   EventiSequenza.l=Sequenza(PrimaSequenzaDaVisualizzare+Sequenza-1)\Eventi
  3103.   If SequenzaSelezionata>0 AND PrimaSequenzaDaVisualizzare+Sequenza=SequenzaSelezionata
  3104.    If NoteSequenza>0 Then WColour 3 Else WColour 2
  3105.    Format "000":Print PrimaSequenzaDaVisualizzare+Sequenza:Format "":Print "->"
  3106.   Else
  3107.    If NoteSequenza>0 Then WColour 2 Else WColour 1
  3108.    Format "000":Print PrimaSequenzaDaVisualizzare+Sequenza:Format "":Print "->"
  3109.   EndIf
  3110.   If EventiSequenza>0
  3111.    Print EventiSequenza," event":If EventiSequenza>1 Then Print "s"
  3112.    Print " into sequence, "
  3113.   Else
  3114.    Print "empty sequence, "
  3115.   EndIf
  3116.   If NomeSequenza$<>""
  3117.    Print NomeSequenza$
  3118.   Else
  3119.    Print "unnamed"
  3120.   EndIf
  3121.  Next Sequenza
  3122. End Statement
  3123.  
  3124. Statement MostraIlTempo{}
  3125. SHARED AltezzaFonte
  3126. SHARED AltezzaSchermo
  3127. SHARED BattuteAlMinuto
  3128. SHARED TicPerCinquantesimoDiSecondo
  3129.  WLocate 0,AltezzaSchermo-(AltezzaFonte+3)-8-8
  3130.  WColour 3:Print "BPM>",BattuteAlMinuto," Ticks/50th>",TicPerCinquantesimoDiSecondo
  3131. End Statement
  3132.  
  3133. ;----------------------------------------------------
  3134. ;questo programma puo' essere lanciato dal Workbench
  3135. ;this program can be launched from Workbench
  3136. ;_-------------------------------------------
  3137. WBStartup
  3138.  
  3139. CaricaLaFonteDiCaratteriTopaz8{}
  3140.  
  3141. ImpostaIlParlatoDellAmiga{}
  3142.  
  3143. CaricaLeImmaginiDelleNote{}
  3144.  
  3145. CaricaLaBitmapDiSfondo{}
  3146.  
  3147. ImpostaLoSchermo{}
  3148.  
  3149. CaricaLaStoriaDeiProgettiAperti{}
  3150.  
  3151. ImpostaLaFinestraPrincipale{}
  3152.  
  3153. CalcolaLaFrequenzaEdIlPeriodoDelleNote{}
  3154.  
  3155. AttivaMIDI{}
  3156.  
  3157. Sequenze.w=0
  3158.  
  3159. SequenzaSelezionata.w=0
  3160.  
  3161. VoceSpenta=%1111
  3162.  
  3163. ;-----------------
  3164. ;clclo principale
  3165. ;main loop
  3166. ;----------
  3167. Repeat
  3168.  
  3169.  MettiLImmagineDiSfondoNellaFinestraPrincipale{}
  3170.  
  3171.  MostraLeSequenze{}
  3172.  
  3173.  MostraGliEventiMusicaliDisponibili{}
  3174.  
  3175.  MostraIlTempo{}
  3176.  
  3177.  Redraw #FinestraPrincipale
  3178.  
  3179. ;--------------------------------------------------------------
  3180. ;questa variabile cattura gli eventi della finestra principale
  3181. ;this variable catch main window events
  3182. ;---------------------------------------
  3183.  EventoFinestraPrincipale.l=WaitEvent
  3184.  
  3185.  Select EventoFinestraPrincipale
  3186.  
  3187. ;------------------------------------
  3188. ;se avete premuto un tasto del mouse
  3189. ;if you have prssed a mouse button
  3190. ;----------------------------------
  3191.  Case #HaiPremutoUnTastoDelTopo
  3192.   YTopo=WMouseY:TastoCliccatoDelTopo.b=MButtons:TastoPremutoDelTopo.b=Joyb(1)
  3193.   If TastoCliccatoDelTopo=1
  3194.    If YTopo>=8 AND Ytopo<8+(SequenzeVisibili-1)*8
  3195.     SequenzaSelezionata=PrimaSequenzaDaVisualizzare+(YTopo)/8
  3196.    EndIf
  3197.   EndIf
  3198. ;---------------------------
  3199. ;se avete premuto un gadget
  3200. ;if you have pressed a gadget
  3201. ;-----------------------------
  3202.  Case #HaiPremutoUnGadget
  3203.   Select GadgetHit
  3204. ;  Case 1
  3205. ;  WLocate 0,AltezzaSchermo-(AltezzaFonte+3)-8-8:WColour 0,0:Print SPACE$(80)
  3206.   Case 2
  3207.    LunghezzaSlider=AltezzaSchermo-(AltezzaFonte+3)-8-8-8
  3208.    PrimaSequenzaDaVisualizzare=ValoreSlider{2,500-SequenzeVisibili,LunghezzaSlider,"VERTICAL",#ListaGadgetPrincipale}
  3209.   End Select
  3210.  
  3211. ;------------------------------
  3212. ;se avete rilasciato un gadget
  3213. ;if you have released a gadget
  3214. ;------------------------------
  3215.  Case #HaiRilasciatoUnGadget
  3216.   Select GadgetHit
  3217.   Case 1
  3218.    LunghezzaSlider=640
  3219.    BattuteAlMinuto=10+ValoreSlider{1,300-9,LunghezzaSlider,"HORIZONTAL",#ListaGadgetPrincipale}
  3220.    TicPerCinquantesimoDiSecondo=BattuteAlMinuto*192*4/3000
  3221.   Case 2
  3222.    LunghezzaSlider=AltezzaSchermo-(AltezzaFonte+3)-8-8-8
  3223.    PrimaSequenzaDaVisualizzare=ValoreSlider{2,500-SequenzeVisibili,LunghezzaSlider,"VERTICAL",#ListaGadgetPrincipale}
  3224.   End Select
  3225.  
  3226. ;--------------------------------------
  3227. ;se avete attivato il menu' principale
  3228. ;if you have activated main menu
  3229. ;--------------------------------
  3230.  Case #HaiAttivatoIlMenu
  3231.  
  3232.   If MenuHit=0 AND ItemHit=1
  3233.    CaricaUnProgetto{}
  3234.    ImpostaLaFinestraPrincipale{}
  3235.   EndIf
  3236.  
  3237.   If MenuHit=1 AND ItemHit=0
  3238.    EseguiGliEventi{#EseguiGliEventiDallaFinestraPrincipale}
  3239.   EndIf
  3240.  
  3241.   If MenuHit=2 AND ItemHit=0
  3242.    EditoreSuoni{}
  3243.   EndIf
  3244.  
  3245.   If MenuHit=2 AND ItemHit=1
  3246.    If SequenzaSelezionata>0
  3247.     EditoreSequenza{}
  3248.    Else
  3249.     EZRequest "AmySequencer message","You must select a sequence first","OK"
  3250.    EndIf
  3251.   EndIf
  3252.  
  3253.   If MenuHit=3 AND ItemHit=0
  3254.    AttivaMIDI{}
  3255.   EndIf
  3256.  
  3257.   If MenuHit=3 AND ItemHit=1
  3258.    If Exists("ProjectsHistory")
  3259.     CancellaLaStoriaDeiProgettiAperti{}
  3260.     ImpostaLaFinestraPrincipale{}
  3261.    EndIf
  3262.   EndIf
  3263.  
  3264. ;-------------------------------------------------------------------
  3265. ;se avete scelto la voce Quit dal menu' Project attiva la variabile
  3266. ; EsciDalProgramma
  3267. ;if you have selected voice Quit from Project menu activates EsciDalProgramma
  3268. ; flag
  3269. ;------
  3270.   If MenuHit=0 AND ItemHit=VoceMenuEsci Then EsciDalProgramma=True
  3271.  
  3272. ;--------------------------
  3273. ;se avete premuto un tasto
  3274. ;if you have pressed a key
  3275. ;--------------------------
  3276.  Case #HaiPremutoUnTasto
  3277.  
  3278. ;--------------------------------------------
  3279. ;questa variabile memorizza il tasto premuto
  3280. ;this variable store key pressed
  3281. ;--------------------------------
  3282.   TastoPremuto$=Inkey$
  3283.  
  3284. ;-------------------------------------------------------------------
  3285. ;se avete premuto il tasto Esc attiva la variabile EsciDalProgramma
  3286. ;if you have typed Esc key activates EsciDalProgramma flag
  3287. ;----------------------------------------------------------
  3288.   If TastoPremuto$=TastoEsc$ Then EsciDalProgramma=True
  3289.  
  3290.  End Select
  3291.  
  3292. ;----------------------------------------------------------------
  3293. ;ripete il ciclo se la variabile EsciDalProgramma e' disattivata
  3294. ;repeats loop if EsciDalProgramma flag is deactivated
  3295. ;-----------------------------------------------------
  3296. Until EsciDalProgramma=True
  3297.  
  3298. ;----------------------
  3299. ;fine del programma
  3300. ;program end
  3301. ;------------
  3302. End
  3303.